210 votes

Séparation d'une chaîne de caractères Java par le symbole du tuyau 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 de la Regex :

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

Et c'est comme ça que j'ai besoin que ça fonctionne. Cependant, si j'exécute 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 que j'attendais :

>A<
>B<
>C<
><
>D<

Pourquoi cela se produit-il ?

2 votes

452voto

Jigar Joshi Points 116533

Vous devez

test.split("\\|");

split utilise une expression régulière et dans regex | est un métacaractère représentant le OR opérateur. Vous devez échapper à ce caractère en utilisant \ (écrit en String comme "\\" depuis \ est également un méta-caractère dans les chaînes de caractères et nécessite un autre caractère \ pour y échapper).

Vous pouvez également utiliser

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

et laissez Pattern.quote créer la version échappée de la regex représentant | .

17 votes

Elle l'est, split() prend une expression rationnelle et | est un caractère spécial pour reg ex

1 votes

Tu es mon deuxième choix en tant que modérateur sur stack overflow. Tous mes vœux de réussite.

41voto

Aaron Digulla Points 143830

Utilisez un échappement approprié : string.split("\\|")

Ou, en 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 avez besoin de citer/échapper les entrées de l'utilisateur.

3 votes

Je ne sais pas exactement quand la transition a été faite, mais en Java 8, on utilise Pattern.quote() .

6voto

berliandi Points 51

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 + "<");
    }
}

3voto

Simon Points 3180

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

StringUtils.split(test, "|");

2voto

Homer Points 27

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

(J'ai utilisé ceci à la place de .split("\\|") ce qui n'a pas fonctionné pour moi).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X