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 ainsi 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'attendrais:
>A<
>B<
>C<
><
>D<
Pourquoi cela arrive-t-il?
Réponses:
Vous avez besoin
split
utilise l' expression régulière et regex|
est un métacaractère représentant l'OR
opérateur. Vous devez échapper ce caractère à l'aide de\
(écrit en String car"\\"
puisqu'il\
est également un métacaractère dans les littéraux String et en demander un autre\
pour l'échapper).Vous pouvez aussi utiliser
et laissez
Pattern.quote
créer la version échappée du regex représentant|
.la source
split()
méthode prend regex et|
est un caractère spécial pour reg exUtilisez un échappement approprié:
string.split("\\|")
Ou, dans Java 5+, utilisez l'assistant
Pattern.quote()
qui a été créé exactement à cette fin:qui fonctionne avec des chaînes d'entrée arbitraires. Très utile lorsque vous devez citer / échapper une entrée utilisateur.
la source
Pattern.quote()
.Utilisez ce code:
la source
Vous pouvez également utiliser la bibliothèque apache et faire ceci:
la source
Vous pouvez également utiliser
.split("[|]")
.(J'ai utilisé cela à la place de
.split("\\|")
, ce qui n'a pas fonctionné pour moi.)la source
Spécifier une limite ou un maximum sera précis pour des exemples tels que: "boo ||| a" ou "|| boo |" ou "|||"
Mais
test.split("\\|");
retournera des tableaux de chaînes de longueur différente pour les mêmes exemples.utiliser la référence: lien
la source
la méthode split () prend une expression régulière comme argument
la source