Swift : Comment remplacer des caractères dans une chaîne ? Analyse complète pour débutants
\n\nTôt ou tard, chaque développeur Swift est confronté à une tâche : remplacer certains caractères d'une chaîne par d'autres. Cela semble simple, non ? Mais les débutants sont souvent perdus car Swift String n'est pas un tableau de caractères comme en C, mais une structure complexe compatible Unicode. Dans cet article, nous allons passer en revue les méthodes les plus populaires et efficaces pour remplacer des caractères en Swift, des plus simples aux plus avancées.
\n\nNous ne nous contenterons pas de lister les méthodes de manière sèche. Nous analyserons plutôt des exemples concrets que vous rencontrerez en pratique : du remplacement d'espaces à la suppression de la ponctuation, en passant par le travail avec les emojis. C'est parti !
\n\nPourquoi Swift String n'est-elle pas simplement un tableau de caractères ?
\nAvant de remplacer des caractères, il est important de comprendre comment une chaîne est structurée en Swift. String est une collection de Character, mais chaque Character peut être composé de plusieurs scalaires Unicode (par exemple, l'emoji 🚀 ou la lettre « é » avec un accent). Par conséquent, l'indexation par Int ne fonctionne pas directement. Swift utilise plutôt String.Index.
Mais pour remplacer des caractères, vous n'avez pas besoin de plonger dans les détails des index — il existe des méthodes prêtes à l'emploi de haut niveau. Examinons les plus populaires.
\n\nMéthode n°1 : replacingOccurrences — le roi du remplacement
\nLa méthode la plus simple et évidente consiste à utiliser replacingOccurrences(of:with:). Elle retourne une nouvelle chaîne avec les occurrences remplacées. La chaîne d'origine reste inchangée (Swift est un langage avec des chaînes immuables par défaut).
let original = "Hello, World!"\nlet replaced = original.replacingOccurrences(of: "World", with: "Swift")\nprint(replaced) // "Hello, Swift!"\nprint(original) // "Hello, World!" — l'original n'a pas changé\n\nCette méthode est idéale pour les cas simples : remplacer un mot, un caractère ou une sous-chaîne. Mais que faire si vous devez remplacer plusieurs caractères différents ? Par exemple, supprimer tous les espaces et les points ?
\n\nChaîne d'appels pour des remplacements multiples
\nVous pouvez appeler replacingOccurrences plusieurs fois à la suite :
let text = "Hello, World! How are you?"\nlet cleaned = text\n .replacingOccurrences(of: ",", with: "")\n .replacingOccurrences(of: "!", with: "")\n .replacingOccurrences(of: " ", with: "_")\nprint(cleaned) // "Hello_World_How_are_you?"\n\nInconvénient : si les remplacements sont nombreux, le code devient lourd. Pour de tels cas, d'autres méthodes ou expressions régulières sont plus adaptées.
\n\nMéthode n°2 : Remplacement avec map et filter (approche fonctionnelle)
\nSwift n'est pas seulement un langage orienté objet, mais aussi fonctionnel. Vous pouvez parcourir chaque caractère d'une chaîne avec map et les remplacer selon une condition. C'est particulièrement pratique lorsque vous devez remplacer toutes les occurrences d'un ensemble spécifique de caractères.
let input = "a1b2c3d4"\nlet result = input.map { char -> Character in\n if char.isNumber {\n return "X"\n } else {\n return char\n }\n}\nprint(String(result)) // "aXbXcXdX"\n\nIci, nous avons remplacé tous les chiffres par "X". Et si vous devez supprimer des caractères ? Utilisez filter :
let withPunctuation = "Hello!!! How are you??"\nlet noPunctuation = withPunctuation.filter { !$0.isPunctuation }\nprint(noPunctuation) // "Hello How are you"\n\nCette approche est très flexible : vous pouvez utiliser n'importe quelle vérification — isNumber, isLetter, isWhitespace ou même une comparaison avec un ensemble de caractères.
Méthode n°3 : Expressions régulières (NSRegularExpression)
\nLorsque la tâche se complexifie (remplacement par motif, suppression de tous les emails, remplacement de dates), les expressions régulières sont indispensables. Swift prend en charge NSRegularExpression de Foundation.
\n\nimport Foundation\n\nlet text = "My email is test@example.com and your is user@test.org"\nlet regex = try! NSRegularExpression