使用String replaceAll在某些字符前面时如何不替换
Posted
技术标签:
【中文标题】使用String replaceAll在某些字符前面时如何不替换【英文标题】:How to not replace when preceded with some characters using String's replaceAll 【发布时间】:2012-04-05 21:26:01 【问题描述】:我需要替换文本中的一些单词,但是我需要在替换策略中放入条件如下:
我想用 word2 替换 word1:
String word1 = "word1";
String word2 = "word2";
但如果 word1 前面有 word3 ,我不想替换它:
String word3 = "word3."; //with the dot at the ending
如果文本是 word3.word1 我不想碰它。
但我似乎无法使用 String 的 replaceAll
方法处理 单词边界。
编辑:
如果 word1 的前缀或后缀为“-”字符,即 -word1 或 word1-,我也不想更改 或 -word1-
任何帮助都将不胜感激。
【问题讨论】:
如果你想替换 word1 并且它是分离的,你可以使用String.replaceAll(" word1 ", " word2 ")
(注意前导和结束空格)。您的字符串word3.word1
不会受到影响。干杯!
【参考方案1】:
使用正则表达式进行否定回溯:(?<!word3\\.)word1
【讨论】:
+1 这很好用。如果 word1 具有“-”字符的后缀或前缀,即“-word1”或“word1-”或“-word1-”,我不想替换怎么办【参考方案2】:我想这会给你一个提示
String str = "word3.word1.word2.word1";
str.replaceAll("word3.word1", "word3.wordX1").replaceAll("word1", "word2").replaceAll("wordX1", "word1");
【讨论】:
当然!我提到 'wordX1' 作为一些字符串,可以假定它在字符串列表中永远不可用。如果可以假设,那么你不能使用这个。【参考方案3】:我假设以下情况
String word1 = "word1";
String word2 = "word2";
String word3 = "word3";
String mysentence = "word3.myname.word1";
以编程方式你会这样做
int word1loc = mysentence.indexOf(word1);
int word2loc = mysentence.indexOf(word2);
int word3loc = mysentence.indexOf(word3);
if (word1loc> word3loc)
mysentence.replaceAll(word1,word2);
我相信它可以帮助你......!
【讨论】:
您对 replaceAll 的调用基本上是无操作的,因为字符串是不可变的。 文本中可能有多个 word1、word2 和 word3,遗憾的是这无济于事。【参考方案4】:如果 word1 前面有 word3,我不想替换它。
您需要使用negative lookbehind。
除非你想硬编码你可能想使用的单词Pattern.quote
。
下面是一些示例代码:
String word1 = "word1";
String word2 = "word2";
String word3 = "word3.";
String regex = String.format("(?<!%s)%s", Pattern.quote(word3),
Pattern.quote(word1));
String input = "aaa word1 bbb word3.word1 ccc";
String result = input.replaceAll(regex, word2);
System.out.println(result);
输出:
aaa word2 bbb word3.word1 ccc
(第一个word1
被替换,第二个word1
未被替换,因为它前面是word3.
)
【讨论】:
+1 这很好用。如果 word1 具有“-”字符的后缀或前缀,即“-word1”或“word1-”或“-word1-”,我不想替换怎么办 看看消极的lookbehind和消极的lookahead。以上是关于使用String replaceAll在某些字符前面时如何不替换的主要内容,如果未能解决你的问题,请参考以下文章
用另一个替换特定字符串 - String#replaceAll()
Java-String的replaceAll()方法(力扣20题相关)
String 类中replace 和replaceAll方法的区别