Проблема в вашем решении в том, что вы положили набор строки экземпляра str.replaceAll("[^str]","+")
, который исключит любой символ из переменной str
и который не решит вашу проблему
EX : при попытке str.replaceAll("[^XYZ]","+")
это исключит любую комбинацию символа X
, символа Y
и символа Z
из метода замены, так что вы получите "++XY+++XYZ
" ,
На самом деле вы должны исключить последовательность символов вместо str.replaceAll
.
Вы можете сделать это, используя захватить группу символов, таких как (XYZ)
, затем использовать отрицательный прогноз , чтобы сопоставить строку, которая не содержит последовательность символов: ^((?!XYZ).)*$
Проверьте это решение для получения дополнительной информации об этой проблеме, но вы должны знать, что может быть сложно найти регулярное выражение, чтобы сделать это напрямую.
Я нашел два простых решения этой проблемы:
Решение 1 :
Вы можете реализовать метод для замены всех символов на +
, за исключением экземпляра данной строки:
String exWord = "XYZ";
String str = "abXYxyzXYZ";
for(int i = 0; i < str.length(); i++){
// exclude any instance string of exWord from replacing process in str
if(str.substring(i, str.length()).indexOf(exWord) + i == i){
i = i + exWord.length()-1;
}
else{
str = str.substring(0,i) + "+" + str.substring(i+1);//replace each character with '+' symbol
}
}
Примечание : str.substring(i, str.length()).indexOf(exWord) + i
это если оператор исключит любую строку экземпляра exWord
из процесса замены в str
.
выход
+++++++XYZ
Решение 2 :
Вы можете попробовать этот подход, используя метод ReplaceAll , и он не нуждается ни в каком сложном регулярном выражении:
String exWord = "XYZ";
String str = "abXYxyzXYZ";
str = str.replaceAll(exWord,"*"); // replace instance string with * symbol
str = str.replaceAll("[^*]","+"); // replace all characters with + symbol except *
str = str.replaceAll("\\*",exWord); // replace * symbol with instance string
Примечание : Это решение будет работать, только если ваша входная строка str
не содержит символов *
.
Также вы должны экранировать любой символ со специальным значением в регулярном выражении в строке экземпляра фразы exWord
, например: exWord = "++"
.