Why does String.split need pipe delimiter to be es

2018-12-31 22:33发布

问题:

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?

回答1:

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.



回答2:

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:

You can simply do this:

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