Supposons que j'ai ce bloc de code:
String x = "Hello ++ World!"; if(x.contains(" ++ ")) System.out.println(x.split(" ++ ")[0]);
Pourquoi est-ce que lorsque j'exécute ce code, je reçois la sortie:
Hello ++ World!
au lieu de Hello
? Cela a évidemment quelque chose à voir avec le split ()
, cependant, je ne peux pas le comprendre.
3 Réponses :
La méthode String :: split
utilise Regex pour le fractionnement.
Votre expression "++"
est un Regex et le caractère +
a une signification particulière. De la documentation:
Divise cette chaîne autour des correspondances de l'expression régulière donnée.
Vous devez échapper ces caractères:
System.out.println(x.split(" \\+\\+ ")[0]);
Utiliser Pattern.quote comme Thomas recommandé ci-dessus est encore mieux.
Parce que ++
il est interprété comme une expression régulière. Vous devez y échapper avec une barre oblique inverse. Essayez ceci:
System.out.println (x.split ("\\ + \\ +") [0]);
Eh bien, cela ne fonctionne pas, car \ est également un caractère d'échappement en Java, vous devez donc également échapper les barres obliques inverses.
Merci d'avoir fait remarquer cela. Je suis sûr que j'ai ajouté 2 barres obliques inverses.
La méthode Split utilise une expression rationnelle comme argument, vous devez échapper les caractères spéciaux comme +
. Essayez quelque chose comme:
String x = "Hello ++ World!"; if(x.contains(" ++ ")) System.out.println(x.split("\\s\\+\\+\\s")[0]);
split
accepte une expression régulière. Le caractère+
est un caractère avec une signification particulière dans le contexte des expressions régulières.String.split (String)
traite le paramètre comme une expression régulière où+
a une signification particulière. Essayez plutôtsplit ("\\ + \\ +")
ousplit (Pattern.quote ("++"))
.