Why does String.split need pipe delimiter to be es

2018-12-31 22:13发布

I am trying to parse a file that has each line with pipe delimited values. It did not work correctly when I did not escape the pipe delimiter in split method, but it worked correctly after I escaped the pipe as below.

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

Can someone please explain why the pipe character needs to be escaped for the split() method?

3条回答
还给你的自由
2楼-- · 2018-12-31 22:40

Because the syntax for that parameter to split is a regular expression, where in the '|' has a special meaning of OR, and a '\|' means a literal '|' so the string "\\|" means the regular expression '\|' which means match exactly the character '|'.

查看更多
其实,你不懂
3楼-- · 2018-12-31 22:40

You can simply do this:

String[] arrayString = yourString.split("\\|");
查看更多
旧人旧事旧时光
4楼-- · 2018-12-31 22:45

String.split expects a regular expression argument. An unescaped | is parsed as a regex meaning "empty string or empty string," which isn't what you mean.

查看更多
登录 后发表回答