我正在寻找在 Java 中查找和替换字符串的最佳方法。
这是一句话:“我叫米兰,人们都知道我是米兰瓦西奇”。
我想用 Milan Vasic 替换字符串 Milan,但在我已经有 Milan Vasic 的地方,不应该这样。
搜索/替换后的结果应该是:“我的名字是 Milan Vasic,人们都知道我是 Milan Vasic”。
我尝试使用 indexOf() 和 Pattern/Matcher 组合,但我的结果都看起来不优雅,有人有优雅的解决方案吗?
干杯!
最佳答案
好吧,您可以使用 regular expression查找“Milan”后面没有“Vasic”的情况:
Milan(?! Vasic)
并将其替换为全名:
String.replaceAll("Milan(?! Vasic)", "Milan Vasic")
(?!...)
部分是 negative lookahead这确保了括号中的部分不会跟随任何匹配项。它不消耗匹配本身的任何字符。
或者,您可以简单地在名字之后插入(嗯,技术上替换零宽度匹配)姓氏,除非它后面已经跟了姓氏。这看起来很相似,但使用了 positive lookbehind还有:
(?<=Milan)(?! Vasic)
您可以将其替换为 "Vasic"
(注意字符串开头的空格):
String.replaceAll("(?<=Milan)(?! Vasic)", " Vasic")
你可以试试这些东西here例如。
关于Java 查找和替换字符串的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2049528/