Вот такой вариант работает
private static void replace() {
String t = "Мне очень нравится Тайланд*-+";
System.out.println(t.replaceAll("[^а-яА-Я\\s]", ""));
}
Но надо принять множество и обработать, и уже такой вариант не работает
private static SortedSet<String> clearSet(SortedSet<String> set) {
for (String string : set) {
string.replaceAll("[^а-яА-Я\\s]", "");
set2.add(string);
}
return set2;
}
Вопрос. Как написать логику, оставляя только буквы
String — неизменяемый класс. Метод replaceAll не изменяет саму строку, а возвращает новую, измененную строку.
Рассмотрим на примере:
String input = "ab";
String result = input.replaceAll("a", "");
System.out.println(input); //выводится "ab", строка не изменилась
System.out.println(result); //выводится "b"
Соответственно, для исправления нужно обрабатывать возвращаемое из replaceAll значение.
Для этого можно объявить переменную:
for (String string : set) {
String clearString = string.replaceAll("[^а-яА-Я\\s]", "");
set2.add(clearString);
}
Или просто передать в set2 результат:
for (String string : set) {
set2.add(string.replaceAll("[^а-яА-Я\\s]", ""));
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники