为什么 String.split 需要转义管道分隔符?

我试图解析一个文件,其中每一行都有管道分隔值。 在拆分方法中没有转义管道分隔符时,它不能正常工作,但在如下转义管道后,它能正常工作。

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

有人能解释一下为什么 split()方法需要转义管道字符吗?

94375 次浏览

因为对于 分开来说,这个参数的语法是一个正则表达式,在 '|'中有一个特殊的 OR 的含义,而 '\|'表示字面的 '|',所以字符串 "\\|"表示正则表达式 '\|',这意味着与字符 '|'完全匹配。

String.split需要一个正则表达式参数。未转义的 |被解析为表示“空字符串或空字符串”的正则表达式,这不是您要表达的意思。

你可以这样做:

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