2
votes

.split () une chaîne contenant les caractères "++"

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.


2 commentaires

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ôt split ("\\ + \\ +") ou split (Pattern.quote ("++")) .


3 Réponses :


8
votes

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]);


1 commentaires

Utiliser Pattern.quote comme Thomas recommandé ci-dessus est encore mieux.



0
votes

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]);


2 commentaires

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.



-1
votes

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]);


0 commentaires