1

我需要替换文本中的一些单词,但我需要在替换策略中放入条件,如下所示:

我想用word2替换word1

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

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

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

也就是说,如果文本是word3.word1我不想碰它。但我似乎无法使用String的方法处理单词边界replaceAll

编辑:

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

任何帮助都是不言而喻的。

4

4 回答 4

5

使用正则表达式和否定的lookbehind:(?<!word3\\.)word1

于 2012-03-21T11:07:31.943 回答
1

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

您需要使用否定的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.

于 2012-03-21T11:04:49.857 回答
1

我假设以下情况

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

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

于 2012-03-21T11:12:33.960 回答
1

我想这会给你一个提示

String str = "word3.word1.word2.word1";
str.replaceAll("word3.word1", "word3.wordX1").replaceAll("word1", "word2").replaceAll("wordX1", "word1");
于 2012-03-21T11:21:44.387 回答