Vérification de sous-chaîne en Swift : guide complet avec exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Comment vérifier si une chaîne contient une sous-chaîne en Swift ? Guide complet

\n\n

Bonjour, cher développeur ! Si tu as déjà codé en Swift et que tu t’es demandé : « Comment puis-je trouver un mot à l’intérieur d’un autre ? », tu es au bon endroit. Ce sujet est l’une des questions les plus populaires sur Stack Overflow (la version anglaise cumule des centaines de milliers de vues). Et ce n’est pas un hasard : la manipulation des chaînes est une base incontournable pour toute application.

\n\n

Dans cet article, nous allons explorer toutes les méthodes légitimes pour vérifier si une chaîne contient une sous-chaîne. Du simple contains() aux techniques avancées avec recherche insensible à la casse et expressions régulières. C’est parti !

\n\n

1. La méthode la plus simple : contains()

\n\n

Depuis Swift 1.0, nous disposons de la méthode intégrée contains() pour le type String. Elle est intuitive et très rapide.

\n\n
let fullString = "Bonjour, monde Swift !"\nlet searchString = "Swift"\n\nif fullString.contains(searchString) {\n    print("Oui, la chaîne contient '\\(searchString)'")\n} else {\n    print("Non, elle ne contient pas")\n}\n// Résultat : Oui, la chaîne contient 'Swift'
\n\n

Important : la méthode contains() est sensible à la casse. Autrement dit, "swift" ne sera pas trouvé dans la chaîne "Swift". Mais nous allons corriger cela un peu plus loin.

\n\n

2. Recherche insensible à la casse : localizedCaseInsensitiveContains()

\n\n

Il est souvent nécessaire de trouver un mot sans tenir compte des majuscules. Pour cela, il existe une méthode spéciale qui fonctionne avec la locale de l’utilisateur.

\n\n
let text = "Bienvenue dans Swift"\nlet search = "swift"\n\nif text.localizedCaseInsensitiveContains(search) {\n    print("Trouvé ! La casse n’est pas un obstacle.")\n} else {\n    print("Non trouvé")\n}\n// Résultat : Trouvé ! La casse n’est pas un obstacle.
\n\n

Cette méthode utilise la locale actuelle de l’appareil, ce qui est particulièrement important pour les langues ayant des règles de comparaison spécifiques (par exemple, le turc, où « i » et « I » sont des lettres différentes).

\n\n

3. Recherche avec locale : localizedStandardContains()

\n\n

Une autre méthode utile est localizedStandardContains(). Elle effectue une recherche comme le fait la recherche standard d’iOS (par exemple, dans Spotlight ou le Finder).

\n\n
let fileName = "Photo_vacances_2024.jpg"\nlet query = "vacances"\n\nif fileName.localizedStandardContains(query) {\n    print("Fichier trouvé !")\n}\n// Résultat : Fichier trouvé !
\n\n

Cette méthode normalise automatiquement les chaînes, supprime les signes diacritiques (par exemple, « é » = « e ») et fonctionne sans tenir compte de la casse. Idéale pour les barres de recherche dans une interface.

\n\n

4. La méthode classique : range(of:)

\n\n

Parfois, il ne suffit pas de savoir si une sous-chaîne existe, il faut aussi obtenir sa position. C’est là que range(of:) intervient. Elle retourne une plage optionnelle (Range<String.Index>?).

\n\n
let phrase = "Apprendre Swift sur pythonlib.fr"\nlet word = "Swift"\n\nif let range = phrase.range(of: word) {\n    print("Sous-chaîne trouvée à la position : \\(range.lowerBound)")\n    // On peut même extraire un morceau de la chaîne\n    let extracted = phrase[range]\n    print("Extrait : \\(extracted)")\n} else {\n    print("Sous-chaîne non trouvée")\n}
\n\n

Pour une recherche insensible à la casse avec range, utilisez l’option .caseInsensitive :

\n\n
if let range = phrase.range(of: "swift", options: .caseInsensitive) {\n    print("Trouvé sans tenir compte de la casse : \\(phrase[range])")\n}
\n\n

5. Vérification du début et de la fin d’une chaîne

\n\n

Parfois, il faut vérifier non pas « contient-il ? », mais « commence-t-il par... » ou « se termine-t-il par... ». Pour cela, il existe des méthodes spécifiques :

\n\n
let url = "https://pythonlib.fr"\n\nif url.hasPrefix("https://") {\n    print("C’est une URL sécurisée")\n}\n\nif url.hasSuffix(".fr") {\n    print("Domaine français")\n}
\n\n

Ces deux méthodes sont également sensibles à la casse.

Blogs

Book Recommendations