一尘不染

Java查找和替换字符串的最佳方法?

java

我正在寻找Java中字符串查找和替换的最佳方法。

这句话是这样的:“我叫米兰,人们把我称为米兰·瓦西奇​​”。

我想用Milan Vasic代替字符串Milan,但是在我已经拥有Milan Vasic的地方,不应该这样。

搜索/替换后的结果应为:“我叫Milan Vasic,人们称我为Milan Vasic”。

我曾尝试使用indexOf()以及Pattern / Matcher组合,但是我的结果都不美观,有人可以使用优雅的解决方案吗?

干杯!


阅读 264

收藏
2020-12-03

共1个答案

一尘不染

好吧,您可以使用正则表达式查找“
Milan”后没有“ Vasic”的情况:

Milan(?! Vasic)

并将其替换为全名:

String.replaceAll("Milan(?! Vasic)", "Milan Vasic")

(?!...)部分是否定的前瞻性,可确保括号中的部分不跟随任何匹配项。它不会在比赛本身中消耗任何字符。

另外,您可以简单地在姓氏后插入(好,技术上是替换零宽度的匹配项)姓氏,除非姓氏后面已经跟有姓氏。这看起来很相似,但是后面也使用了积极的表情:

(?<=Milan)(?! Vasic)

您可以将其替换为" Vasic"(请注意字符串开头的空格):

String.replaceAll("(?<=Milan)(?! Vasic)", " Vasic")

例如,您可以在此处尝试这些操作。

2020-12-03