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