Хотите заменить «^^ ^» на «~» скажем, abc ^^^ xyz следует заменить как abc ~ xyz

#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() принимает РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ в качестве аргумента.. вам нужно избежать ^ s

2. чего я не понимаю, так это того, почему вы "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);
    }
}