用管道符("|")拆分字符串

Gir*_*ran 213 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("|");
Run Code Online (Sandbox Code Playgroud)

产量

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

dev*_*ull 486

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

String[] value_split = rat_values.split("\\|");
Run Code Online (Sandbox Code Playgroud)


Pra*_*eek 73

使用Pattern.quote()

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

//System.out.println(Arrays.toString(rat_values.split(Pattern.quote("|")))); //(FOR GETTING OUTPUT)
Run Code Online (Sandbox Code Playgroud)

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

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

使用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]);
}
Run Code Online (Sandbox Code Playgroud)

使用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)
Run Code Online (Sandbox Code Playgroud)

产量

[Food 1 ,  Service 3 ,  Atmosphere 3 ,  Value for money 1 ]
Run Code Online (Sandbox Code Playgroud)


Mar*_*oun 19

或.. Pattern#quote:

String[] value_split = rat_values.split(Pattern.quote("|"));
Run Code Online (Sandbox Code Playgroud)

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

|在正则表达式中特殊含义.

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


Ani*_*dha 8

split将regex作为参数.|在正则表达式中有特殊意义..使用\\|而不是|逃避它.


Kic*_*ick 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);

    }
Run Code Online (Sandbox Code Playgroud)