我有以下文字:
Testlalatest
我正在尝试用另一个字符串
替换lala
仅当Test[replace]test
之后或之后有任何字符时,输出应为lala
。
但我得到了:Tes[replace]est
代码:
strLine = strLine.replaceAll("\\w"+word+"\\w", replaceWord);
答案 0 :(得分:4)
您可以使用外观来确保您的单词前面和后面跟着一个单词字符。
strLine = strLine.replaceAll("(?<=\\w)" + word + "(?=\\w)", replaceWord);
或者在任何一方使用\B
:
strLine = strLine.replaceAll("\\B" + word + "\\B", replaceWord);
答案 1 :(得分:1)
工作示例:
public class Main {
public static void main(String[] args) {
for (String prefix : new String[] { "pre", "" }) {
for (String suffix : new String[] { "suf", "" }) {
String toReplace = "lala";
String before = prefix + toReplace + suffix;
System.out.println(before + " -> "
+ before.replaceAll("(?<=.)" + toReplace
+ "|" + toReplace + "(?=.)", "[replaced]"));
}
}
}
}
输出:
prelalasuf -> pre[replaced]suf
prelala -> pre[replaced]
lalasuf -> [replaced]suf
lala -> lala
Information on the relevant regex syntax.
正如所评论的那样,你为一个单词字符写了//w
而不是\\w
,这很奇怪。我不确定之前是如何取代的。
另外,您说您想要匹配任何字符,这意味着您要使用.
,而不是\\w
。