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?

Author: Donald Duck, 2012-05-29

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 |.

 431
Author: jmj, 2016-11-28 10:54:30

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.

 33
Author: Aaron Digulla, 2019-10-01 20:12:35

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 + "<");
    }
}
 4
Author: berliandi, 2016-09-01 09:16:34

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

StringUtils.split(test, "|");
 3
Author: Simon, 2015-11-29 13:48:37

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

(j'ai utilisé ceci au lieu de .split("\\|"), ce qui n'a pas fonctionné pour moi.)

 1
Author: Homer, 2016-11-05 02:08:15
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

 0
Author: Ryan Augustine, 2018-09-20 11:14:15

La méthode split() prend une expression régulière comme argument

 -2
Author: Stormy, 2013-08-20 11:02:05