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

时间:2012-03-21 11:02:31

标签: java regex string replaceall word-boundary

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

我想用 word2 替换 word1

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

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

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

如果文字是 word3.word1 ,我不想触摸它。 但我似乎无法使用字符串replaceAll方法处理字边界

编辑:

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

任何帮助都会很明显。

4 个答案:

答案 0 :(得分:5)

使用带有负面后瞻的正则表达式:(?<!word3\\.)word1

答案 1 :(得分:2)

  

如果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.

答案 2 :(得分: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);
}

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

答案 3 :(得分:1)

我认为这会给你一个提示

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