Как заменить все звездочки?

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

Это не работает и не добавляет обратную косую черту.

Ответ 1

Я понял это

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

Ответ 2

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

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

Ответ 3

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

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

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

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