用管柱字符分割字符串("|")

我不能从这个字符串中分割值:

"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 , , |, , 年代,e, r, v, i, c, e, 3 , , |, , A t m, o s, p, h, e r e, 3 , , |, , V, l, u, e, f, o, r、m o, n, e, y,, 1,)

预期的输出

< p >食物1 < br > 服务3 < br > 大气3 < br > 性价比1

287500 次浏览

|是正则表达式中的元字符。你需要转义它:

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

Split将regex作为参数。|在正则表达式中有特殊含义。使用\\|而不是|来转义它。

或. .Pattern#quote:

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

这是因为String#split接受正则表达式:

|有一个正则表达式中的特殊含义

quote将返回正则表达式的String表示形式。

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


}

使用Pattern.quote ()

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


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

使用转义字符(用于元字符)

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

使用模式类(java.util. regx .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 ]