2

私のJavaアプリは、ファイルから次の行を変更しようとしています:

static int a = 5;

目標は、「a」を「mod_a」に置き換えることです。

シンプルstring.replace(var_name, "mod" + var_name)を使用すると、次のことがわかります。

stmod_atic int mod_a = 5;

これは単純に間違っています。グーグルで調べてみると、「\ b」を前に付けることができ、var_nameは単語の始まりを表す必要があることがわかりましたが、string.replace("\\b" + var_name, "mod" + var_name)まったく何もしません:(

(「\b」の代わりに「\b」でもテストしました)

4

2 に答える 2

9
  • \bこれは単語の境界を意味する正規表現です。
  • String.replace()は正規表現を使用しませ\b(したがって、リテラルのみに一致します\b)。
  • String.replaceAll() 正規表現を使用しますか
  • 「aDifferentVariable」を「mod_aDifferentVariable」に置き換えないように、変数の前後\b 両方を使用することもできます。

したがって、可能な解決策は次のとおりです。

String result = "static int a = 5;".replaceAll("\\ba\\b", "mod_a");

またはより一般的な:

static String prependToWord(String input, String word, String prefix) {
    return input.replaceAll("\\b" + Pattern.quote(word) + "\\b", Matcher.quoteReplacement(prefix + word));
}

正規表現で意味を持つ文字が含まれているPattern.qoute()場合に使用することに注意してください。word同様の理由Matcher.quoteReplacement()で、置換 String で使用されます。

于 2012-07-26T10:47:48.283 に答える
4

試す:

string.replaceAll("\\b" + var_name + "\\b", "mod" + var_name);
于 2012-07-26T10:49:06.407 に答える