« Aidez-moi, je n'arrive pas à diviser une chaîne ! » — l'histoire d'un problème
\n\nImaginez : vous écrivez en Java un analyseur de logs, vous traitez un fichier CSV ou vous voulez simplement découper une saisie utilisateur en mots. Et là — stop. Comment faire ? Si vous avez déjà cherché sur Google « How do I split a string in Java », vous savez : cette question sur Stack Overflow a recueilli des centaines de milliers de vues. Non pas parce que les programmeurs Java sont paresseux, mais parce que split() est un outil puissant, mais avec des pièges cachés.
\n\nDans cet article, nous allons détailler la division de chaînes en Java de A à Z. Vous apprendrez comment fonctionne la méthode split(), quelles surprises réservent les expressions régulières, et comment éviter les pièges qui guettent un débutant sur deux. C'est parti !
La méthode split() : votre outil principal
\n\nLa classe String en Java propose deux variantes surchargées de la méthode split() :
public String[] split(String regex)\npublic String[] split(String regex, int limit)\n\nLa première variante prend une expression régulière et retourne un tableau de chaînes. La seconde fait la même chose, mais avec une limite sur le nombre de parties. Cela semble simple ? Regardons des exemples.
\n\nExemple de base : division par espace
\n\npublic class SplitExample {\n public static void main(String[] args) {\n String text = "Java divise les chaînes facilement";\n String[] words = text.split(" ");\n \n for (String word : words) {\n System.out.println(word);\n }\n }\n}\n\nSortie :
\nJava\ndivise\nles\nchaînes\nfacilement\n\nÇa marche ? Ça marche. Mais que faire si vous avez plusieurs espaces consécutifs ? Alors des chaînes vides apparaîtront dans le tableau. Désagréable, n'est-ce pas ?
\n\nDivision d'une chaîne en Java par virgule (CSV)
\n\nL'une des tâches les plus courantes est de diviser une chaîne en Java par virgule. Supposons que vous ayez une chaîne CSV :
\n\nString csv = "pomme,poire,banane,orange";\nString[] fruits = csv.split(",");\n\nfor (String fruit : fruits) {\n System.out.println(fruit.trim()); // trim() enlève les espaces superflus\n}\n\nSortie :
\npomme\npoire\nbanane\norange\n\nNotez que nous avons ajouté trim(), car dans les données réelles, il y a souvent des espaces après la virgule. Sans cela, vous obtiendrez " pomme" avec un espace en tête — et vous vous demanderez pourquoi les chaînes ne correspondent pas.
Expressions régulières : magie et douleur
\n\nLa méthode split() accepte une expression régulière. Cela offre une grande flexibilité, mais nécessite de la prudence. Examinons des scénarios courants.
Division par point
\n\nVous voulez découper une adresse IP "192.168.1.1" ? Le code naïf str.split(".") ne fonctionnera pas. Pourquoi ? Parce que le point dans les expressions régulières est un caractère spécial signifiant « n'importe quel caractère ». En conséquence, vous obtiendrez un tableau de chaînes vides.
La bonne solution est d'échapper le point :
\n\nString ip = "192.168.1.1";\nString[] parts = ip.split("\\\\."); // Double backslash !\n\nfor (String part : parts) {\n System.out.println(part);\n}\n// Sortie : 192 168 1 1\n\nSouvenez-vous : en Java, pour échapper dans les regex, on utilise un double backslash \\\\. Un simple \\ est un caractère d'échappement pour la chaîne, et le double est déjà pour la regex.
Division par plusieurs séparateurs
\n\nQue faire si la chaîne contient à la fois des virgules, des points-virgules et des espaces ? Utilisez une classe de caractères entre crochets :
\n\nString messy = "pomme;poire,banane orange";\nString[] items = messy.split("[;,\\\\s]+"); // ; ou , ou caractères d'espacement\n\nfor (String item : items) {\n System.out.println(item);\n}\n// Sortie : pomme poire banane orange\n\nLe signe + signifie « un ou plusieurs » — cela garantit qu'une séquence de séparateurs ne crée pas