用pipe道字符(“|”)分割string

我无法从这个string拆分值:

"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

| 是正则expression式中的元字符。 你需要逃避它:

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

使用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(为了避免正则expression式的问题)

 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 ] 

或者.. Pattern#quote

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

发生这种情况是因为String#split接受一个正则expression式

| 在正则expression式中有特殊的含义 。

quote将返回正则expression式的string表示。

分割需要使用正则expression式作为参数。 | 在正则expression式中有特殊的含义..使用\\| 而不是| 逃避它。

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