パイプで区切られた値を持つ各行を持つファイルを解析しようとしています。 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
は、正規表現の引数を必要とします。エスケープされていない|
は、「空の文字列または空の文字列」を意味する正規表現として解析されますが、これはあなたが言うことではありません。
split のパラメーターの構文は正規表現であるため、「|」 ORの特別な意味と「\ |」リテラル '|'を意味しますしたがって、文字列「\\ |」正規表現「\ |」を意味しますつまり、文字「|」と完全に一致します。
これを簡単に行うことができます:
String[] arrayString = yourString.split("\\|");