Fractionnement d’une chaîne Java par le symbole de canal en utilisant split (“|”)

La documentation officielle Java indique:

La chaîne "boo:and:foo" , par exemple, donne les résultats suivants avec ces expressions: Regex Result:

 { "boo", "and", "foo" }" 

Et c’est comme ça que j’ai besoin de travailler. Cependant, si je lance ceci:

 public static void main(Ssortingng[] args){ Ssortingng test = "A|B|C||D"; Ssortingng[] result = test.split("|"); for(Ssortingng s : result){ System.out.println(">"+s+"<"); } } 

il imprime:

 >A|B|C||D< 

Ce qui est loin de ce que j’attendais:

 >ABCD< 

Pourquoi cela arrive-t-il?

Vous avez besoin

 test.split("\\|"); 

split utilise l’expression régulière et dans l’expression régulière | est un métacaractère représentant l’opérateur OR . Vous devez échapper à ce caractère en utilisant \ (écrit en Ssortingng sous la forme "\\" car \ est également un métacaractère dans les littéraux Ssortingng et nécessite un autre \ pour y échapper).

Vous pouvez aussi utiliser

 test.split(Pattern.quote("|")); 

et laissez Pattern.quote créer la version d’ Pattern.quote de la regex représentant | .

Utilisez un échappement correct: ssortingng.split("\\|")

Ou le helper Pattern.quote() qui a été créé exactement à cette fin:

 ssortingng.split(Pattern.quote("|")) 

qui fonctionne avec des chaînes d’entrée arbitraires. Très utile lorsque vous devez citer / échapper une entrée utilisateur.

Utilisez ce code:

 public static void main(Ssortingng[] args) { Ssortingng test = "A|B|C||D"; Ssortingng[] result = test.split("\\|"); for (Ssortingng s : result) { System.out.println(">" + s + "<"); } } 

Vous pouvez également utiliser la bibliothèque apache et faire ceci:

 SsortingngUtils.split(test, "|"); 

Vous pouvez également utiliser .split("[|]") .

(J’ai utilisé ceci au lieu de .split("\\|") , ce qui n’a pas fonctionné pour moi.)

la méthode split () prend une expression régulière comme argument