1. ホーム
  2. java

[解決済み] なぜString.splitはパイプ区切り文字をエスケープする必要があるのですか?

2022-05-29 08:16:40

質問

各行がパイプで区切られたファイルを解析しようとしています。 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() メソッドにパイプ文字をエスケープする必要があるのか、説明できますか?

どのように解決するのですか?

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