Fractionnement d'une chaîne Java par le symbole pipe en utilisant split ("/")
La documentation officielle de 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 se produit-il?
7 answers
Vous avez besoin de
test.split("\\|");
split
utilise une expression régulière et dans regex |
est un métacaractère représentant l'opérateur OR
. Vous devez échapper ce caractère en utilisant \
(écrit en chaîne comme "\\"
car \
est également un métacaractère dans les littéraux de chaîne et nécessite un autre \
pour l'échapper).
Vous pouvez également utiliser
test.split(Pattern.quote("|"));
Et laissez Pattern.quote
créer la version échappée de l'expression régulière représentant |
.
Utilisez l'échappement approprié: string.split("\\|")
Ou, dans Java 5+, utilisez l'assistant Pattern.quote()
qui a été créé exactement dans ce but:
string.split(Pattern.quote("|"))
Qui fonctionne avec des chaînes d'entrée arbitraires. Très utile lorsque vous devez citer / échapper l'entrée de l'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 faire ceci:
StringUtils.split(test, "|");
Vous pouvez également utiliser .split("[|]")
.
(j'ai utilisé ceci au lieu de .split("\\|")
, ce qui n'a pas fonctionné pour moi.)
test.split("\\|",999);
Spécifiant un limite de ou max sera précis pour des exemples comme: "boo|||a" ou "||boo|" ou " |||"
Mais test.split("\\|");
renverra des tableaux de chaînes de longueur différente pour les mêmes exemples.
Référence: lien
La méthode split() prend une expression régulière comme argument