Как не заменить, когда им предшествуют некоторые символы, используя String's replaceAll - PullRequest
1 голос
/ 21 марта 2012

Мне нужно заменить некоторые слова в тексте, но мне нужно поставить условия в стратегии замены следующим образом:

Я хочу заменить word1 на word2 :

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

но я не хочу заменять word1 , если ему предшествует word3 , что:

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

Тоесли текст word3.word1 Я не хочу его трогать.Но я не могу справиться с этим с границами слов , используя String replaceAll метод.

EDIT:

А также я не хочу менять, если слово1 имеет префикс или суффикс символа "-", т.е. -word1 или word1- или -word1-

Любая помощь будет полезна.

Ответы [ 4 ]

5 голосов
/ 21 марта 2012

Используйте регулярные выражения с отрицательным внешним видом: (?<!word3\\.)word1

2 голосов
/ 21 марта 2012

Я не хочу заменять слово 1, если ему предшествует слово 3.

Вам необходимо использовать отрицательный взгляд позади .

Если толькоВы хотите жестко закодировать слова, которые, вероятно, хотите использовать также 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.)

1 голос
/ 21 марта 2012

Я думаю, что это даст вам подсказку

String str = "word3.word1.word2.word1";
str.replaceAll("word3.word1", "word3.wordX1").replaceAll("word1", "word2").replaceAll("wordX1", "word1");
1 голос
/ 21 марта 2012

я предполагаю, что следующий сценарий

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

я верю, что это может помочь вам ...!

...