La documentation officielle Java indique:
La chaîne "boo:and:foo"
, par exemple, donne les résultats suivants avec ces expressions Résultat Regex:
{ "boo", "and", "foo" }"
Et c'est comme ça que j'en ai besoin pour fonctionner. Cependant, si je lance ceci:
public static void main(String[] args){
String test = "A|B|C||D";
String[] result = test.split("|");
for(String s : result){
System.out.println(">"+s+"<");
}
}
il imprime:
><
>A<
>|<
>B<
>|<
>C<
>|<
>|<
>D<
Ce qui est loin de ce à quoi je m'attendais:
>A<
>B<
>C<
><
>D<
Pourquoi cela arrive-t-il?
Vous avez besoin
test.split("\\|");
split
utilise une expression régulière et regex|
est un métacaractère représentant l'opérateur OR
. Vous devez échapper à ce caractère en utilisant \
(écrit dans String sous la forme "\\"
puisque \
est également un métacaractère dans les littéraux de chaîne et nécessite un autre \
pour l'échapper).
Vous pouvez aussi utiliser
test.split(Pattern.quote("|"));
et laissez Pattern.quote
créer la version échappée de la regex représentant |
.
Utilisez l'échappement approprié: string.split("\\|")
Ou l'assistant Pattern.quote()
qui a été créé exactement à cette fin:
string.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(String[] args) {
String test = "A|B|C||D";
String[] result = test.split("\\|");
for (String s : result) {
System.out.println(">" + s + "<");
}
}
Vous pouvez également utiliser la bibliothèque Apache et procéder ainsi:
StringUtils.split(test, "|");
Vous pouvez également utiliser .split("[|]")
.
(Je l'ai utilisé à la place de .split("\\|")
, qui n'a pas fonctionné pour moi.)
test.split("\\|",999);
Spécifier une limite ou max sera précise pour des exemples tels que: "boo ||| a "ou" || boo | " ou "|||"
Mais test.split("\\|");
renverra des tableaux de longueurs différentes pour les mêmes exemples.
référence d'utilisation: lien