Как заменить все звездочки? - PullRequest
11 голосов
/ 05 октября 2010

В Java я хочу заменить все * символы на \*.

Пример: текст: select * from blah

Результат: select \\* from blah

public static void main(String[] args) {
    String test = "select * from blah";
    test = test.replaceAll("*", "\\*");
    System.out.println(test);
}

Это не работает, равно как и добавление обратной косой черты.

Ответы [ 3 ]

15 голосов
/ 05 октября 2010

Я понял это

    String test = "select * from blah *asdf";
    test = test.replaceAll("\\*", "\\\\*");
    System.out.println(test);
11 голосов
/ 05 октября 2010

Для этого вам не нужны какие-либо функции регулярного выражения, поэтому вам следует использовать версию без регулярного выражения String.replace (CharSequence, CharSequence) :

String test = "select * from blah *asdf";
test = test.replace("*", "\\*");
System.out.println(test);
6 голосов
/ 05 октября 2010

Для тех из вас, кто ведет счет дома, и поскольку понимание ответа может быть полезным для кого-то еще ...

String test = "select * from blah *asdf";
test = test.replaceAll("\\*", "\\\\*");
System.out.println(test);

работает, потому что вы должны экранировать специальный символ *, чтобы сделатьрегулярное выражение счастья.Однако \ - это специальный символ в строке Java, поэтому при построении этого регулярного выражения в Java вы также должны экранировать \, следовательно, \\*.

Это часто приводит к тому, что удваивается-escapes при объединении регулярных выражений в строках Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...