为什么String.split需要pipe道分隔符才能被转义?

我正在试图parsing一个文件,每个行与pipe道分隔值。 它没有正确工作,当我没有逃脱pipe道分隔方法的分隔符,但它逃脱了如下所示的pipe道后正常工作。

private ArrayList<String> parseLine(String line) { ArrayList<String> list = new ArrayList<String>(); String[] list_str = line.split("\\|"); // note the escape "\\" here System.out.println(list_str.length); System.out.println(line); for(String s:list_str) { list.add(s); System.out.print(s+ "|"); } return list; } 

有人可以解释为什么pipe道angular色需要逃脱split()方法吗?

String.split需要一个正则expression式参数。 非转义的| 被parsing为正则expression式意思是“空string或空string”,这不是你的意思。

因为要分割的参数的语法是一个正则expression式,在'|' 具有OR的特殊含义,而'\ |' 意味着一个文字“|” 所以string“\\ |” 意味着正则expression式'\ |' 这意味着完全匹配字符“|”。

你可以简单地做到这一点:

 String[] arrayString = yourString.split("\\|");