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

“食物1 |服务3 |氛围3 |物有所值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,)

预期的输出

食物1 服务3 大气3 物有所值1


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

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

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

或. .模式#报价:

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 ]