1

「あなたはテストです」という文の文字列「テスト」であるパターンに一致し、「テスト\」に置き換えます。

StringBuffer sb = new StringBuffer();
Pattern pattern = Pattern.compile("test", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("you are test");
while (matcher.find()) {
matcher.appendReplacement(sb, "test\"));
            }
matcher.appendTail(sb);
replacementString = sb.toString();

matcher.appendReplacement(sb, "test\"));問題は、 「\」が特殊文字と見なされ、置換が実行されないステートメントにあります。

このシナリオを克服する方法と、文字列内の "\" に置き換える方法について、ご意見をお聞かせください。

4

2 に答える 2

6

Java で文字列リテラルに aを入れるには\、 としてエスケープする必要があります\\

しかし、それはもう少し複雑です。javadoc を参照してください。

置換文字列内のバックスラッシュ ( \) とドル記号 ($) は、リテラル置換文字列として扱われる場合とは結果が異なる場合があることに注意してください。上記のように、ドル記号はキャプチャされたサブシーケンスへの参照として扱われる場合があり、バックスラッシュは置換文字列内のリテラル文字をエスケープするために使用されます。

したがって、ダブルエスケープする必要があります:

matcher.appendReplacement(sb, "test\\\\"));
于 2013-02-15T13:28:15.940 に答える
0

1行で同じことを行うのに、なぜこれらすべてのコード行を使用しているのですか?

String s = input.replaceAll("test", "$0\\\\");

$0を使用して一致全体を後方参照し、ダブルダブル バックスラッシュを使用してリテラル正規表現バックスラッシュを作成することに注意してください。

于 2013-02-15T13:39:10.157 に答える