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

SK1*_*SK1 140 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;
}
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么管道角色需要为split()方法转义?

Lou*_*man 175

String.split期望一个正则表达式参数.未转义|的解析为正则表达式,意思是"空字符串或空字符串",这不是你的意思.


dla*_*lin 76

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


小智 6

你可以这样做:

String[] arrayString = yourString.split("\\|");
Run Code Online (Sandbox Code Playgroud)