#java #string
#java #строка
Вопрос:
public class StringExample
{
public static void main(String[] args)
{
String x = "^^^";
String y = "~";
String s = "abc^^^xyz";
if (s != null amp;amp; s.indexOf(x) > -1)
s = s.replaceAll(x,y);
System.out.println("s :" s);
}
}
Это не дает надлежащего результата.
-
Ввод
abc ^^^ xyz
-
Фактический результат
~a ~ b ~ c ~ ^~^~^~x ~ y ~ z
-
Ожидаемый результат
abc ~ xyz
Комментарии:
1. replaceAll() принимает РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ в качестве аргумента.. вам нужно избежать
^
s2. чего я не понимаю, так это того, почему вы
"aaa^^^bbb".replaceAll("^^^","~")
получили~a~b~c~^~^~^~x~y~z
вместо~aaa^^^bbb
?
Ответ №1:
Используйте replace
вместо replaceAll
. Последний принимает выражение регулярного выражения, в котором ^
является зарезервированным символом.
Комментарии:
1. Я обвиняю Sun в вводящем в заблуждение именовании метода.
2. @KarolS
replace
был добавлен в более поздней версии Java. К тому времени было слишком поздно переименовыватьreplaceAll
.
Ответ №2:
используйте replace()
вместо replaceAll()
s = s.replace(x,y);
Ответ №3:
Попробуйте это :
String str = "abc^^^xyz";
String replaceAll = str.replaceAll("\^ ", "~");
Примечание: все, что вам нужно, это экранировать символ (^)
Ответ №4:
либо
s= s.replaceAll("\^{3}","~");
или
s=s.replace("^^^","~");
фактически, replace()
метод вызывает replaceAll()
внутренне.
и вы можете сохранить s.indexOf(x) > -1
проверку.
Ответ №5:
Экранируйте символы ^.
public class StringExample {
public static void main(String[] args) {
String x = "\^\^\^";
String y = "~";
String s = "abc^^^xyz";
if (s != null amp;amp; s.indexOf(x) > -1)
s = s.replaceAll(x,y);
System.out.println("s :" s);
}
}
Ответ №6:
Хотя в данном случае вы должны использовать replace(x,y)
вместо replaceAll(x,y)
, вы все равно можете использовать replaceAll()
, просто процитируйте первый аргумент.
Это преобразует регулярное выражение в буквальную строку.
Pattern.quote(x)
quote()
будет экранировано зарезервировано; символы регулярного выражения, подобные этому:
Q^^^E
Пример для полноты:
import java.util.regex.Pattern;
public class StringExample {
public static void main(String[] args) {
String x = "^^^";
String y = "~";
String s = "abc^^^xyz";
if (s != null amp;amp; s.indexOf(x) > -1) {
s = s.replaceAll(Pattern.quote(x), y);
}
System.out.println("s :" s);
}
}