Регулярное выражение - спецсимволы
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
private static final Pattern pattern = Pattern.compile("\\b\\d*([t][\\^\\*\\.\\+]*?[e][s][t])\\b",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.UNICODE_CHARACTER_CLASS);
public static void main(String[] args) {
System.out.println(filterText("test")); // +
System.out.println(filterText("t.est")); // +
System.out.println(filterText("t*est"));
System.out.println(filterText("t^est"));
System.out.println(filterText("t+est"));
}
public static String filterText(String text) {
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String word = matcher.group(0);
text = text.replaceAll(word, word.replaceAll(".", "*"));
}
return text;
}
}
Вывод:
****
*****
t******
t^est
t+est
Не работает экранирование спец. символов: ^*+
Ответы (1 шт):
Автор решения: ferZ
→ Ссылка
Вы не там ищете. Регулярное выражение правильно отрабатывает. Это можно проверить, попробовав что-нибудь вывести в консоль в блоке while. Соответственно, проблема в:
String word = matcher.group(0);
text = text.replaceAll(word, word.replaceAll(".", "*"));
Кстати, внутри [] не нужно экранировать +.*. ^ тоже можно не экранировать, если переместить с нулевого значения. "\\b\\d*([t][+^*.]?[e][s][t])\\b" вполне отрабатывает.