次のような文字列を分割しようとしています: abc|aa|| 通常の string.split を使用する場合、正規表現を指定する必要があります。次のことを試みました: string.split("|") string.split("\|") string.split("/|") string.split("\Q|\E")
それらのどれも機能しません.....
誰かがそれを機能させる方法を知っていますか?
次のような文字列を分割しようとしています: abc|aa|| 通常の string.split を使用する場合、正規表現を指定する必要があります。次のことを試みました: string.split("|") string.split("\|") string.split("/|") string.split("\Q|\E")
それらのどれも機能しません.....
誰かがそれを機能させる方法を知っていますか?
どのように試したかはわかりませんが、
public static void main(String[] args) {
String a= "abc|aa||";
String split = Pattern.quote("|");
System.out.println(split);
System.out.println(Arrays.toString(a.split(split)));
}
プリントアウト
\Q|\E
[abc, aa]
効果的に分割し|
ます。は\Q ... \E
正規表現の引用です。その中にあるものはすべて、リテラル パターンとして一致します。
string.split("\|"); // won't work because \| is not a valid escape sequence
string.split("/|"); // will compile, but split on / and empty space, so between each character
string.split("|"); // will compile, but split on empty space, so between each character
// true alternative to quoted solution above
string.split("\\|") // escape the second \ which will resolve as an escaped | in the regex pattern
バックスラッシュも特殊文字であるため、バックスラッシュを 2 つ使用する必要があります。したがって、エスケープ文字をエスケープする必要があります。つまり \ \|
|
は特殊文字であるため、スラッシュを使用してエスケープする必要があります。使ってみて
string.split("\\|")
|
は正規表現の特殊文字であるため、エスケープする必要があります。\|
バックスラッシュ\
は Java の特殊文字であるため、エスケープする必要があります。
その結果、目的の効果を得るには、次のことを行う必要があります。
string.split("\\|")
次のパターンはすべて問題なく分割できます。"\\Q|\\E"
"\\|"
"[|]"
もちろん、後者の 2 つが望ましいです。