用管道符(“|”)拆分字符串

时间:2014-02-03 10:19:03

标签: 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,| ,,, 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,]

预期输出

  

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

5 个答案:

答案 0 :(得分:433)

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

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

答案 1 :(得分:69)

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

使用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 ]

答案 2 :(得分:17)

或.. Pattern#quote

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

这种情况正在发生,因为String#split接受正则表达式

|special meaning in regex

quote将返回正则表达式的字符串表示形式。

答案 3 :(得分:8)

split将regex作为参数。|在正则表达式中具有特殊含义..使用\\|代替|来逃避它。

答案 4 :(得分:2)

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

    }