1

文字列を文字の配列で分割したいので、次のコードがあります。

String target = "hello,any|body here?";
char[] delim = {'|',',',' '};
String regex = "(" + new String(delim).replaceAll("(.)", "\\\\$1|").replaceAll("\\|$", ")");
String[] result = target.split(regex);

「Q」のような文字を delim[] 配列に追加する場合を除いて、すべて正常に動作し、例外がスローされます。

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 11
(\ |\,|\||\Q)

では、非特殊文字でも機能するように修正するにはどうすればよいですか?

前もって感謝します

4

3 に答える 3

1

使用Pattern.quoteして角括弧に入れるとうまくいくようです:

String regex = "[" + Pattern.quote(new String(delim)) + "]";

問題のある文字でテスト済み

于 2013-08-30T07:44:48.297 に答える
0

Qは正規表現の制御文字ではないため、その\\前に付ける必要はありません (これは、次の文字を制御文字としてではなく、リテラルとして解釈する必要があることを示すだけです)。

`\\.` in a regex means "a dot"

`.` in a regex means "any character"

\\Qは正規表現の特殊文字ではないため失敗するためQ、引用符で囲む必要はありません。

delimString 配列を作成し、必要な値に引用符を追加します。

 delim = {"\\|", ..... "Q"};
于 2013-08-30T07:28:30.387 に答える