Java 如何在前面使用字符串';s代替所有

Java 如何在前面使用字符串';s代替所有,java,regex,string,replaceall,word-boundary,Java,Regex,String,Replaceall,Word Boundary,我需要替换文本中的一些单词,但我需要在替换策略中添加以下条件: 我想用word2替换word1: 但是如果前面有word3,我不想替换word1,因为word3是: String word3 = "word3."; //with the dot at the ending 也就是说,如果文本是word3.word1,我不想碰它。 但我似乎无法使用String的replaceAll方法处理单词边界 编辑: 而且,如果word1的前缀或后缀为“-”字符,我也不想更改,即-word1或word1-或

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

我想用word2替换word1:

但是如果前面有word3,我不想替换word1,因为word3是:

String word3 = "word3."; //with the dot at the ending
也就是说,如果文本是word3.word1,我不想碰它。 但我似乎无法使用String的
replaceAll
方法处理单词边界

编辑:

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

任何帮助都是值得的

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

你需要使用一种新的方法

除非你想硬编码你可能想使用的单词
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);

(第一个
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);
}

我相信它可能会帮助你……!

我想这会给你一个提示

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

如果要替换word1并且它已分离,则可以使用
String.replaceAll(“word1”、“word2”)
(注意前导空格和结尾空格)。您的字符串
word3。word1
不会受到影响。干杯!您对replaceAll的调用基本上是不可操作的,因为字符串是不可变的。文本中可能有多个word1、word2和word3,遗憾的是这不会有帮助。+1这很好。如果word1的后缀或前缀为“-”,我不想替换该怎么办字符,即“-word1”或“word1-”或“-word1-”请查看负向后看和负向前看。+1这很好。如果word1的后缀或前缀为“-”字符,即“-word1”或“word1-”或“-word1-”,我也不想替换,该怎么办辩护!我提到“wordX1”是一些可以假定在字符串列表中永远不可用的字符串。如果可以假定为True,则不能使用此字符串。
int word1loc = mysentence.indexOf(word1);
int word2loc = mysentence.indexOf(word2);
int word3loc = mysentence.indexOf(word3);

if (word1loc> word3loc){
mysentence.replaceAll(word1,word2);
}
String str = "word3.word1.word2.word1";
str.replaceAll("word3.word1", "word3.wordX1").replaceAll("word1", "word2").replaceAll("wordX1", "word1");