/ / Разделяне на низ със символ на тръба (“|”) [дубликат] - java, regex

Разделяне на низ с тръбен знак ("|") [дубликат] - java, regex

Не мога да разделя стойностите от този низ:

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

Тук е настоящият ми код:

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

продукция

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

Очакван резултат

Храна 1
Сервиз 3
Атмосфера 3
Съотношение качество-цена 1

Отговори:

355 за отговор № 1

| е метахарактер в режекс. Трябва да избягате:

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

61 за отговор № 2

Използване на Pattern.quote ()

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

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

Използване на символи Escape (за метасимволи)

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

Използване на StringTokenizer (За избягване на проблеми с регулярните изрази)

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

Използване на класа 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)

продукция

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

13 за отговор № 3

Или.. Pattern#quote:

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

Това се случва, защото String#split приема а регулярен:

| има специално значение в regex.

quote ще върне представянето на String за регулярен.


6 за отговор № 4

split приема regex като параметър.| има специално значение в regex .. използване \| вместо | за да избяга.


2 за отговор № 5
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);

}