String.split ではパイプ区切り文字をエスケープする必要があるのはなぜですか? 質問する

String.split ではパイプ区切り文字をエスケープする必要があるのはなぜですか? 質問する

各行がパイプで区切られた値を持つファイルを解析しようとしています。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()?

ベストアンサー1

String.split正規表現の引数が必要です。エスケープされていないものは、|「空の文字列または空の文字列」を意味する正規表現として解析されますが、これは意図したものではありません。

おすすめ記事