如何使用String的replaceAll替换前面的某些字符

我需要替换文本中的一些单词,但我需要在替换策略中添加条件如下:

我想用word2替换word1

String word1 = "word1"; String word2 = "word2"; 

但我不想替换word1,如果它前面是word3 ,它是:

 String word3 = "word3."; //with the dot at the ending 

那就是如果文本是word3.word1我不想触摸它。 但我似乎无法使用StringreplaceAll方法处理字边界

编辑:

如果word1的前缀或后缀为“ – ”字符,即-word1word1--word1-,我也不想改变

任何帮助都会很明显。

我想这会给你一个提示

 String str = "word3.word1.word2.word1"; str.replaceAll("word3.word1", "word3.wordX1").replaceAll("word1", "word2").replaceAll("wordX1", "word1"); 

使用带有负向lookbehind的正则表达式: (?

如果它前面有word3,我不想替换word1。

你需要使用负面的lookbehind 。

除非您想对单词进行硬编码,否则您可能也想使用Pattern.quote

这是一些示例代码:

 String word1 = "word1"; String word2 = "word2"; String word3 = "word3."; String regex = String.format("(? 

输出:

 aaa word2 bbb word3.word1 ccc 

(第一个word1被替换,第二个word1没有被替换,因为它前面是word3.

我假设以下情况

 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); } 

我相信它可以帮助你……!