2

我的 java 应用程序正在尝试从文件中修改以下行:

static int a = 5;

目标是用“mod_a”替换“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() 确实使用正则表达式
  • 您还可以\b 变量之前之后使用,以避免将“aDifferentVariable”替换为“mod_aDifferentVariable”。

所以一个可能的解决方案是这样的:

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()的 caseword包含在正则表达式中有意义的任何字符。出于类似的原因Matcher.quoteReplacement(),用于替换字符串。

于 2012-07-26T10:47:48.283 回答
4

尝试:

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