尝试这个:
source=source.replace(str1, str2);
// handle things like "f(f(x))*g(g(x))"
source=source.replaceFirst(Pattern.quote?(str2), Matcher.quoteReplacement(str1));
请参阅Pattern.quote here的文档.
请参阅Matcher.quoteReplacement here的文档.
警告:
您选择的这种方法有两个大假设!
>假设1:str2必须出现在源代码中,位于str1之前,并且
>假设2:str2只能在源字符串中出现一次
>此外:如果其中一个字符串是另一个字符串的子字符串,则会得到意外的结果
例如:
String longer = str1;
String shorter = str2;
if(str2.length() > str1.length()) {
longer = str2;
shorter = str1;
}
Pattern p = Pattern.compile(Pattern.quote(longer) + "|" + Pattern.quote(shorter));
Matcher m = p.matcher(source);
StringBuffer sb = new StringBuffer();
while (m.find()) {
String replacement = str1;
if(m.group(0).equals(str1)) {
replacement = str2;
}
m.appendReplacement(sb, Matcher.quoteReplacement(replacement));
}
m.appendTail(sb);
System.out.println(sb.toString());