我需要更换一些特定的单词。
例如,如果我的文字有
He needs to have java skills
我需要将其替换为
He/She needs to have java skills
我用下面的代码实现了这个
String replacedText = originalText.replaceAll("\\bHe\\b|\\bShe\\b","He/She");
但问题是当我再次执行代码时,输出是
He/She/He/She needs to have java skills
问题是'\\b'
即使在斜线之前或之后,也会考虑单词。
更新:我从word / excel / html文件中获取源代码。所以这是第一次工作正常。我的意图是如果我再次在修改过的文件上运行代码,它不应该改变任何东西。
如何解决这个问题?
答案 0 :(得分:1)
开始时几乎没有提示:
he
she
可以代表s?he
(其中s
是可选的),因此您不需要he|she
(它将事情缩短,同样简单。)
此外,您可以使用(?i)
标记,这将使您的正则表达式不区分大小写。
现在考虑更换
he
she
但也
he/she
she/he
he/she
。表示此案例的正则表达式看起来像s?he(/s?he)?
请尝试使用
replaceAll("(?i)\\bs?he(/s?he)?\\b","He/She");
答案 1 :(得分:1)
我借助负面前瞻和消极的外观来实现它。有了这个逻辑,我可以运行代码。对已经修改过的文件的次数。
private String replace(String originalText) {
String replacedText = originalText.replaceAll(
"\\b(he(?!/)|(?<!/)she)\\b", "he/she");
replacedText = replacedText.replaceAll("\\b(He(?!/)|(?<!/)She)\\b",
"He/She");
replacedText = replacedText.replaceAll("\\b(his(?!/)|(?<!/)her)\\b",
"his/her");
replacedText = replacedText.replaceAll("\\b(His(?!/)|(?<!/)Her)\\b",
"His/Her");
replacedText = replacedText.replaceAll("\\bhim(?!/)\\b", "him/her");
replacedText = replacedText.replaceAll("\\bHim(?!/)\\b", "Him/Her");
return replacedText;
}
感谢Biffen的想法。
答案 2 :(得分:0)
一种简单的方法可能是
String[] originalTexts = {"He needs to have java skills",
"She needs to have java skills",
"He/She needs to have java skills"
};
for (String original : originalTexts) {
String replacedText = original.replaceAll("\\b(She/He|He/She|He|She)\\b","He/She");
System.out.printf("original: %-32s replacedText: %20s%n", original, replacedText);
}