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

标签 java string

我正在寻找在 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/

相关文章:

java - 更改时间选择器的主题 - Android

java - 使用replaceAll()替换字符串中所有出现的字符

swift 3.0 数据到字符串?

java - setItemChecked 用于 ListView 的 Android 选择器在版本 2.2.1 中不起作用

java - 如何修复方法引用上的不明确类型(整数的 toString)?

java - 将 log4j-api-2.0-beta9.jar、log4j-core-2.0-beta9 替换为 log4j-api-2.0.1.jar 和 log4j-core-2.0.1.jar 不起作用

java - Android AlarmManager 服务

javascript - 查找并替换可能包含子元素的 html 元素的文本部分

python - 有没有办法在 Python 中删除字符串中除字母以外的所有字符?

C - 从文件中选择随机字符串