こんにちは、垂直バーで区切られた文字列を分割しようとしています。例えば:
String str = "a=1|b=2";
Java では、次のようにする必要があります。
str.split("\\|");
単一のスラッシュを使用する場合:
str.split("\|");
コンパイラはエラーを出します:
無効なエスケープ シーケンス (有効なものは \b \t \n \f \r \" \' \ )
なぜこれが起こるのか誰にも説明できますか?ありがとう!
バックスラッシュ\
は特殊文字です。Java の世界では、文字をエスケープするために使用されます。
パイプは、正規表現の世界では「 OR|
」を意味する特殊文字です。
パイプをセパレーターとして使用するには、パイプをエスケープする必要があるため (正規表現の解析中に認識できるようにするため)、正規表現でこれを取得する必要があります: \|
.
ただし、バックスラッシュは Java の特殊文字であり、String オブジェクトを使用しているため、最終的に期待される最終結果として解釈できるように、バックスラッシュをエスケープする必要があります。\|
これを行うには、バックスラッシュを別のバックスラッシュでエスケープするだけです:\\|
最初のバックスラッシュは、パイプ (正規表現の要件) をエスケープする 2 番目のバックスラッシュ (Java の要件) をエスケープします。
Java 文字列では、バックスラッシュを別のバックスラッシュでエスケープする必要があります。そのため、正規表現の「標準的な」形式は確か\|
に ですが、Java 文字列としては と記述する必要があります"\\|"
。