Как удалить лишние символы и оставить одни буквы и пробел

244
28 апреля 2017, 18:01

Вот такой вариант работает

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

Вопрос. Как написать логику, оставляя только буквы

Answer 1

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]", ""));
}  
READ ALSO
ошибка добавлении репозитория в deepin

ошибка добавлении репозитория в deepin

пытаюсь поставить яву на deepin 154 вот что вываливается при попытке добавить репу:

351
PreferenceFragmentCompat - Must specify preferenceTheme in theme

PreferenceFragmentCompat - Must specify preferenceTheme in theme

Сразу оговорюсь, решения с английского SO мне не помоглиПробовал Это, это, и это,

279
Законность парсинга сайтов [требует правки]

Законность парсинга сайтов [требует правки]

Есть один сайт, нужно "слить" весь контентСтруктура следующая : http://lenfilm

245