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

时间:2012-03-21 16:21:40

标签: java regex 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()方法转义管道角色吗?

3 个答案:

答案 0 :(得分:175)

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

答案 1 :(得分:76)

因为split的参数语法是正则表达式,所以在'|'中具有OR的特殊含义,并且'\ |'意思是文字“|”所以字符串“\\ |”表示正则表达式'\ |'这意味着完全匹配字符'|'。

答案 2 :(得分:6)

你可以这样做:

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