web-dev-qa-db-fra.com

Fractionner une chaîne avec un caractère de pipe ("|")

Je ne parviens pas à séparer les valeurs de cette chaîne:

"Food 1 | Service 3 | Atmosphere 3 | Value for money 1 "

Voici mon code actuel:

String rat_values = "Food 1 | Service 3 | Atmosphere 3 | Value for money 1 ";
String[] value_split = rat_values.split("|");

Sortie

[ F, o, o, d, 1, |, S, e, r, v, i, c, e, 3, |, A, t, m, o, s, p, h, e, r, e, 3, |, V, a, l, u, e, f, o, r, m, o, n, e, y, 1,]

Production attendue

Nourriture 1
Service 3
Atmosphère 3
Rapport qualité/prix 1

205
Giridharan

| est un métacaractère en regex. Vous devez y échapper:

String[] value_split = rat_values.split("\\|");
463
devnull

Utiliser Pattern.quote ()

String[] value_split = rat_values.split(Pattern.quote("|"));

//System.out.println(Arrays.toString(rat_values.split(Pattern.quote("|")))); //(FOR GETTING OUTPUT)

Utilisation de caractères d'échappement (pour les métacaractères)

String[] value_split = rat_values.split("\\|");
//System.out.println(Arrays.toString(rat_values.split("\\|"))); //(FOR GETTING OUTPUT)

Utilisation de StringTokenizer (Pour éviter les problèmes d’expression régulière)

public static String[] splitUsingTokenizer(String Subject, String Delimiters) 
{
     StringTokenizer StrTkn = new StringTokenizer(Subject, Delimiters);
     ArrayList<String> ArrLis = new ArrayList<String>(Subject.length());
     while(StrTkn.hasMoreTokens())
     {
       ArrLis.add(StrTkn.nextToken());
     }
     return ArrLis.toArray(new String[0]);
}

Utilisation de la classe Pattern (Java.util.regex.Pattern)

Arrays.asList(Pattern.compile("\\|").split(rat_values))
//System.out.println(Arrays.asList(Pattern.compile("\\|").split(rat_values))); //(FOR GETTING OUTPUT)

Sortie

[Food 1 ,  Service 3 ,  Atmosphere 3 ,  Value for money 1 ]
71
Prateek

Ou .. Pattern#quote :

_String[] value_split = rat_values.split(Pattern.quote("|"));
_

Cela se produit parce que String#split accepte une expression rationnelle :

_|_ a un signification spéciale dans les expressions rationnelles .

quote retournera une représentation sous forme de chaîne pour l'expression régulière .

18
Maroun

split prend regex comme paramètre .| a une signification particulière dans regex .. utilisez \\| au lieu de | pour l'échapper.

8
Anirudha
String rat_values = "Food 1 | Service 3 | Atmosphere 3 | Value for money 1 ";
    String[] value_split = rat_values.split("\\|");
    for (String string : value_split) {

        System.out.println(string);

    }
2
Kick