Исключение цифр из строки
Задача стоит такая: Реализуйте программу, которая принимает строку из консоли, выделяет из нее все символы. латиницы/кириллицы и вычисляет количество их вхождений в строке по каждому из символов. Мой код подсчитывает количество, но все символов без разбора. А нужно чтобы считал только буквы.
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.