Исключение цифр из строки

Задача стоит такая: Реализуйте программу, которая принимает строку из консоли, выделяет из нее все символы. латиницы/кириллицы и вычисляет количество их вхождений в строке по каждому из символов. Мой код подсчитывает количество, но все символов без разбора. А нужно чтобы считал только буквы.

    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Ведите строку: ");
    String str = scanner.next();
    Map<Character, Integer> characterIntegerMap = getCharsCount(str);
    for (Map.Entry<Character, Integer> entry : characterIntegerMap.entrySet()) {
        System.out.println("Символ " + entry.getKey() + " встречается " + entry.getValue()+" раз");
    }

}

public static Map getCharsCount(String str) {
    Map<Character, Integer> charsArray = new TreeMap<>();
    for (char c : str.toLowerCase().toCharArray()) {
        if (!charsArray.containsKey(c)) {
            charsArray.put(c, 1);
        } else {
            int i = charsArray.get(c);
            charsArray.put(c, ++i);
        }
    }

    return charsArray;

}

}


Ответы (2 шт):

Автор решения: had0uken

Воспользуйтесь регулярными выражениями для обработки строки:

public class Test6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Ведите строку: ");
        String str = scanner.next();
        System.out.println("Строка до обработки:");
        System.out.println(str);
        //отрезать все кроме букв:
        str=str.replaceAll("[^A-Za-zА-Яа-я]", "");

        System.out.println("Строка после обработки:");
        System.out.println(str);
        Map<Character, Integer> characterIntegerMap = getCharsCount(str);
        for (Map.Entry<Character, Integer> entry : characterIntegerMap.entrySet()) {
            System.out.println("Символ " + entry.getKey() + " встречается " + entry.getValue()+" раз");
        }

    }

    public static Map getCharsCount(String str) {
        Map<Character, Integer> charsArray = new TreeMap<>();
        for (char c : str.toLowerCase().toCharArray()) {
            if (!charsArray.containsKey(c)) {
                charsArray.put(c, 1);
            } else {
                int i = charsArray.get(c);
                charsArray.put(c, ++i);
            }
        }

        return charsArray;

    }
}

Консоль:

Ведите строку: 
вфіошвіовіфлолвыфловыфлоdsakjjkjdsakj@#$#$##$%dsakjks%%$
Строка до обработки:
вфіошвіовіфлолвыфловыфлоdsakjjkjdsakj@#$#$##$%dsakjks%%$
Строка после обработки:
вфошвовфлолвыфловыфлоdsakjjkjdsakjdsakjks
Символ a встречается 3 раз
Символ d встречается 3 раз
Символ j встречается 5 раз
Символ k встречается 5 раз
Символ s встречается 4 раз
Символ в встречается 5 раз
Символ л встречается 4 раз
Символ о встречается 5 раз
Символ ф встречается 4 раз
Символ ш встречается 1 раз
Символ ы встречается 2 раз

Process finished with exit code 0
→ Ссылка
Автор решения: Stanislav Volodarskiy

Исключить из строки все символы кроме букв можно регулярным выражением:

    private static String keepLettersOnly(String s) {
        return s.replaceAll("[^\\p{L}]", "");
    }

\p{L} выделяет все буквы на всех языках. [^...] выделяет всё кроме того что внутри. Второй обратный слеш - особенность строковых литералов в Java.

→ Ссылка