首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java查找和替换字符串的最佳方式?

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

Stack Overflow用户
提问于 2010-01-12 22:18:41
回答 7查看 115.3K关注 0票数 31

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

这是一句话:“我的名字是米兰,人们都知道我是米兰·瓦西奇”。

我想用米兰·瓦西奇取代米兰,但在我已经拥有米兰·瓦西奇的地方,这不应该是一个案例。

搜索/替换后的结果应该是:“我的名字是米兰·瓦西奇,人们知道我是米兰·瓦西奇”。

我尝试使用indexOf()和Pattern/Matcher组合,但我的结果看起来都不优雅,有人有优雅的解决方案吗?

干杯!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-12 22:20:45

嗯,你可以用regular expression来查找"Milan“后面不跟”Vasic“的情况:

代码语言:javascript
复制
Milan(?! Vasic)

并将其替换为全名:

代码语言:javascript
复制
String.replaceAll("Milan(?! Vasic)", "Milan Vasic")

(?!...)部件是一个negative lookahead,它确保任何匹配的内容都不会跟在括号中的部件后面。它不会消耗匹配本身中的任何字符。

或者,您可以简单地在名字后面插入姓氏(从技术上讲,替换为零宽度匹配),除非它后面已经跟了姓氏。这看起来很相似,但也使用了positive lookbehind

代码语言:javascript
复制
(?<=Milan)(?! Vasic)

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

代码语言:javascript
复制
String.replaceAll("(?<=Milan)(?! Vasic)", " Vasic")

例如,你可以在here上尝试这些东西。

票数 46
EN

Stack Overflow用户

发布于 2010-01-12 22:28:39

另一种选择:

代码语言:javascript
复制
"My name is Milan, people know me as Milan Vasic"
    .replaceAll("Milan Vasic|Milan", "Milan Vasic"))
票数 25
EN

Stack Overflow用户

发布于 2010-01-12 22:21:43

一种可能性是,先减少较长的表单,然后再展开所有:

代码语言:javascript
复制
string.replaceAll("Milan Vasic", "Milan").replaceAll("Milan", "Milan Vasic")

另一种方式,将Vasic视为可选的:

代码语言:javascript
复制
string.replaceAll("Milan( Vasic)?", "Milan Vasic")

其他人则描述了基于lookaheadalternation的解决方案。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2049528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档