我正在寻找Java中字符串查找和替换的最佳方法。
这句话是这样的:“我叫米兰,人们把我称为米兰·瓦西奇”。
我想用Milan Vasic代替字符串Milan,但是在我已经拥有Milan Vasic的地方,不应该这样。
搜索/替换后的结果应为:“我叫Milan Vasic,人们称我为Milan Vasic”。
我曾尝试使用indexOf()以及Pattern / Matcher组合,但是我的结果都不美观,有人可以使用优雅的解决方案吗?
干杯!
好吧,您可以使用正则表达式查找“ Milan”后没有“ Vasic”的情况:
Milan(?! Vasic)
并将其替换为全名:
String.replaceAll("Milan(?! Vasic)", "Milan Vasic")
该(?!...)部分是否定的前瞻性,可确保括号中的部分不跟随任何匹配项。它不会在比赛本身中消耗任何字符。
(?!...)
另外,您可以简单地在姓氏后插入(好,技术上是替换零宽度的匹配项)姓氏,除非姓氏后面已经跟有姓氏。这看起来很相似,但是后面也使用了积极的表情:
(?<=Milan)(?! Vasic)
您可以将其替换为" Vasic"(请注意字符串开头的空格):
" Vasic"
String.replaceAll("(?<=Milan)(?! Vasic)", " Vasic")
例如,您可以在此处尝试这些操作。