我的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”)
答案 0 :(得分:9)
\b
这里是一个regular expression,意思是一个单词边界,所以它几乎就是你想要的。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()
包含在正则表达式中有意义的任何字符,我会使用word
。出于类似的原因,Matcher.quoteReplacement()
用于替换字符串。
答案 1 :(得分:4)
尝试:
string.replaceAll("\\b" + var_name + "\\b", "mod" + var_name);