各行がパイプで区切られた値を持つファイルを解析しようとしています。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
正規表現の引数が必要です。エスケープされていないものは、|
「空の文字列または空の文字列」を意味する正規表現として解析されますが、これは意図したものではありません。