Divisione della stringa con carattere pipe (“|”)

Non riesco a dividere i valori da questa stringa:

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

Ecco il mio codice attuale:

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

Produzione

[, 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,]

Uscita prevista

Cibo 1
Servizio 3
Atmosfera 3
Rapporto qualità / prezzo 1

| è un metacarattere nella regex. Avresti bisogno di fuggire:

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

Utilizzare Pattern.quote ()

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

Usare i caratteri di fuga (per i metacaratteri)

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

Utilizzo di StringTokenizer (per evitare problemi di espressioni regolari)

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

Utilizzo della class 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) 

Produzione

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

Oppure .. Pattern#quote :

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

Questo sta accadendo perché String#split accetta un’espressione regolare :

| ha un significato speciale in regex .

quote restituirà una rappresentazione String per la regex .

split prende regex come parametro. | ha un significato speciale nella regex .. usa \\| invece di | per sfuggirlo.

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