[英]How to not replace when preceded with some characters using String's replaceAll
我需要替换文本中的一些单词,但我需要在替换策略中放置条件如下:
我想用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-
任何帮助将是可观的。
使用负向后视正则表达式: (?<!word3\\\\.)word1
如果它前面是 word3,我不想替换 word1。
您需要使用否定的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.
)
我假设以下场景
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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.