Поиск по строкам с regex на Java
1.Как сделать чтобы при указанном regexp выражении, шёл поиск строк в файле по этому выражению, игнорируя регистр слов? CASE_INSENSITIVE работает только для латинских букв.
2.Работая с regexp, для считывания строк из файла лучше использовать Scanner или BufferedReader?
К примеру regex выражение [\"+у+\"]
Нужно чтобы были найдены две строки из файла:
получили по заслугам.
полУчили по заслУгам.
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Для требуемого поиска, нечувствительного к регистру, по кириллице или символам других алфавитов, кроме английского, нужно дополнительно использовать флажок Pattern.UNICODE_CASE (?u):
String str = """
привет
получили по заслугам.
полУчили по заслУгам.
пока
""";
Pattern p = Pattern.compile("[У]", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
System.out.println("String::matches:\n\t" +
str.lines()
.filter(s -> s.matches("(?iu).*[У].*"))
.collect(Collectors.joining("\n\t"))
);
System.out.println("Pattern::find:\n\t" +
str.lines()
.filter(s -> p.matcher(s).find())
.collect(Collectors.joining("\n\t"))
);
Вывод:
String::matches:
получили по заслугам.
полУчили по заслУгам.
Pattern::find:
получили по заслугам.
полУчили по заслУгам.