我正在尝试解析每行包含管道分隔值的文件。 当我没有在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()
方法转义管道角色吗?
答案 0 :(得分:175)
String.split
需要一个正则表达式参数。未转义的|
被解析为正则表达式,意思是“空字符串或空字符串”,这不是你的意思。
答案 1 :(得分:76)
因为split的参数语法是正则表达式,所以在'|'中具有OR的特殊含义,并且'\ |'意思是文字“|”所以字符串“\\ |”表示正则表达式'\ |'这意味着完全匹配字符'|'。
答案 2 :(得分:6)
你可以这样做:
String[] arrayString = yourString.split("\\|");