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

2022-08-31 07:58:42

我正在尝试解析一个文件,该文件具有每行的管道分隔值。当我没有在拆分方法中转义管道分隔符时,它无法正常工作,但是在我转义管道后,它无法正常工作,如下所示。

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()


答案 1

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


答案 2

因为要拆分的参数的语法是正则表达式,其中 在 中具有 OR 的特殊含义,并且 a 表示文本,因此字符串表示正则表达式,这意味着与字符完全匹配。'|''\|''|'"\\|"'\|''|'