Подсчет количества вхождений символа в строке
Есть много способов подсчитать количество вхождений символов в строку в Java.
В этом кратком руководстве сосредоточимся на нескольких примерах подсчета символов – сначала с помощью основной библиотеки Java, а затем с другими библиотеками и платформами, такими как Spring и Guava.
Использование библиотеки Java Core
Императивный подход
Некоторые разработчики предпочитают использовать Java Core. Существует множество способов подсчета количества вхождений символа в строку. Начнем с простого подхода:
String someString = "elephant"; char someChar = 'e'; int count = 0; for (int i = 0; i < someString.length(); i++) < if (someString.charAt(i) == someChar) < count++; >> assertEquals(2, count);
Неудивительно, что данный вариант сработает, но есть и лучшие способы.
Использование рекурсии
Менее очевидное, но все же интересное решение – использовать рекурсию:
private static int countOccurences( String someString, char searchedChar, int index) < if (index >= someString.length()) < return 0; >int count = someString.charAt(index) == searchedChar ? 1 : 0; return count + countOccurences( someString, searchedChar, index + 1); >
Можно вызвать этот рекурсивный метод следующим образом: useRecursionToCountChars(“elephant”, ‘e’, 0).
Использование регулярных выражений
Другой способ – использовать регулярные выражения:
Pattern pattern = Pattern.compile("[^e]*e"); Matcher matcher = pattern.matcher("elephant"); int count = 0; while (matcher.find()) < count++; >assertEquals(2, count);
Обратите внимание, что это решение технически правильное, но неоптимальное, так как использование очень мощных регулярных выражений для решения такой простой задачи, как определение количества вхождений символа в строку, является излишним.
Использование функций Java 8
Здесь могут оказаться очень полезными новые функции, доступные в Java 8.
Давайте используем stream и лямбда-выражения для реализации подсчета:
String someString = "elephant"; long count = someString.chars().filter(ch -> ch == 'e').count(); assertEquals(2, count); long count2 = someString.codePoints().filter(ch -> ch == 'e').count(); assertEquals(2, count2);
Таким образом, это явно более чистое и читабельное решение, использующее основную библиотеку.
Использование внешних библиотек
Рассмотрим несколько решений, использующих утилиты из внешних библиотек.
Использование StringUtils
Всегда лучше использовать существующее решение, чем изобретать свое. Класс commons.lang.StringUtils предоставляет метод countMatches(), который можно использовать для подсчета символов или даже подстрок в заданной строке.
Во-первых, необходимо подключить соответствующую зависимость:
org.apache.commons commons-lang3 3.12.0
Можно найти последнюю версию на Maven Central.
Теперь воспользуемся countMatches() для подсчета количества символов e в строковом литерале:
int count = StringUtils.countMatches("elephant", "e"); assertEquals(2, count);
Использование Guava
Guava может быть полезна при подсчете символов. Необходимо определить зависимость:
com.google.guava guava 31.0.1-jre
Можно найти последнюю версию на Maven Central.
Посмотрим, как Guava может быстро помочь подсчитать символы:
int count = CharMatcher.is('e').countIn("elephant"); assertEquals(2, count);
3.3. Использование Spring
Добавление Spring Framework в проект только для подсчета символов не имеет смысла.
Однако, если он уже есть в проекте, необходимо использовать метод countOccurencesOf():
int count = StringUtils.countOccurrencesOf("elephant", "e"); assertEquals(2, count);
Заключение
В этой статье мы сосредоточились на различных способах подсчета символов в строке. Некоторые из них были разработаны исключительно на Java; некоторые требовали дополнительных библиотек.
Рекомендуется использовать уже существующие утилиты от StringUtils, Guava или Spring. Тем не менее, эта статья предлагает некоторые возможности сделать это с помощью Java 8, если предпочтительнее использовать только Java.
Полный исходный код этих примеров доступен на GitHub.
Как посчитать количество букв в строке java
Чтобы посчитать количество букв в строке, можно использовать метод строк length() . Этот метод вернет длину строки:
var word = "Hello"; var lettersCount = word.length(); System.out.println(lettersCount); // 5
18 ноября 2022
Если строка содержит не только буквы, но и другие символы, а посчитать надо буквы, то можно так :
String word = "a1B2c!D%"; int lettersCount = 0; for (int i = 0; i word.length(); i++) if (Character.isAlphabetic(word.charAt(i))) lettersCount++; > > System.out.println(lettersCount); // => 4
15.16. Java – Метод length()
Метод length() – возвращает длину строки в Java. Длина равна числу 16-разрядных символов Юникода в строке.
Синтаксис
Синтаксис этого метода:
public int length()
Параметры
Подробная информация о параметрах:
Возвращаемое значение
- В Java length() возвращает длину последовательности символов, представленного этим объектом.
Пример 1: определение в Java длины строки
Ниже представлен пример метода length(), который поможет определить длину строки.
import java.io.*; public class Test < public static void main(String args[])< String Str1 = new String("Добро пожаловать на ProgLang.su"); String Str2 = new String("ProgLang.su" ); System.out.print("Длина строки \"Добро пожаловать на ProgLang.su\" - " ); System.out.println(Str1.length()); System.out.print("Длина строки \"ProgLang.su\" - " ); System.out.println(Str2.length()); >>
Получим следующий результат:
Длина строки "Добро пожаловать на ProgLang.su" - 31 Длина строки "ProgLang.su" - 11
Пример 2: сравнение длины строк
Также с помощью метода length() можно не только узнать длину строки, но и сравнить длину строк. Ниже представлен пример как это можно сделать.
public class Test < public static void main(String args[]) < // Определение длины строки s1 и s2. String s1 = "Я стану отличным программистом!"; int len1 = s1.length(); String s2 = "Я стану отличным разработчиком!"; int len2 = s2.length(); // Вывод на экран количества символов в каждой строке. System.out.println( "Длина строки \"Я стану отличным программистом!\": " + len1 + " символ."); System.out.println( "Длина строки \"Я стану отличным разработчиком!\": " + len2 + " символ."); // Сравнение длин строк s1 и s2. if (len1 >len2) < System.out.println( "\nСтрока \"Я стану отличным программистом!\" длинее строки \"Я стану отличным разработчиком!\"."); >if (len1 < len2)< System.out.println( "\nСтрока \"Я стану отличным программистом!\" короче строки \"Я стану отличным разработчиком!\"."); >else < System.out.println( "\nСтроки \"Я стану отличным программистом!\" и \"Я стану отличным разработчиком!\" равны."); >> >
Получим следующий результат:
Длина строки "Я стану отличным программистом!": 31 символ. Длина строки "Я стану отличным разработчиком!": 31 символ. Строки "Я стану отличным программистом!" и "Я стану отличным разработчиком!" равны.
Оглавление
- 1. Java – Самоучитель для начинающих
- 2. Java – Обзор языка
- 3. Java – Установка и настройка
- 4. Java – Синтаксис
- 5. Java – Классы и объекты
- 6. Java – Конструкторы
- 7. Java – Типы данных и литералы
- 8. Java – Типы переменных
- 9. Java – Модификаторы
- 10. Java – Операторы
- 11. Java – Циклы и операторы цикла
- 11.1. Java – Цикл while
- 11.2. Java – Цикл for
- 11.3. Java – Улучшенный цикл for
- 11.4. Java – Цикл do..while
- 11.5. Java – Оператор break
- 11.6. Java – Оператор continue
- 12. Java – Операторы принятия решений
- 12.1. Java – Оператор if
- 12.2. Java – Оператор if..else
- 12.3. Java – Вложенный оператор if
- 12.4. Java – Оператор switch..case
- 12.5. Java – Условный оператор (? 🙂
- 13. Java – Числа
- 13.1. Java – Методы byteValue(), shortValue(), intValue(), longValue(), floatValue(), doubleValue()
- 13.2. Java – Метод compareTo()
- 13.3. Java – Метод equals()
- 13.4. Java – Метод valueOf()
- 13.5. Java – Метод toString()
- 13.6. Java – Метод parseInt()
- 13.7. Java – Метод Math.abs()
- 13.8. Java – Метод Math.ceil()
- 13.9. Java – Метод Math.floor()
- 13.10. Java – Метод Math.rint()
- 13.11. Java – Метод Math.round()
- 13.12. Java – Метод Math.min()
- 13.13. Java – Метод Math.max()
- 13.14. Java – Метод Math.exp()
- 13.15. Java – Метод Math.log()
- 13.16. Java – Метод Math.pow()
- 13.17. Java – Метод Math.sqrt()
- 13.18. Java – Метод Math.sin()
- 13.19. Java – Метод Math.cos()
- 13.20. Java – Метод Math.tan()
- 13.21. Java – Метод Math.asin()
- 13.22. Java – Метод Math.acos()
- 13.23. Java – Метод Math.atan()
- 13.24. Java – Метод Math.atan2()
- 13.25. Java – Метод Math.toDegrees()
- 13.26. Java – Метод Math.toRadians()
- 13.27. Java – Метод Math.random()
- 14. Java – Символы
- 14.1. Java – Метод Character.isLetter()
- 14.2. Java – Метод Character.isDigit()
- 14.3. Java – Метод Character.isWhitespace()
- 14.4. Java – Метод Character.isUpperCase()
- 14.5. Java – Метод Character.isLowerCase()
- 14.6. Java – Метод Character.toUpperCase()
- 14.7. Java – Метод Character.toLowerCase()
- 14.8. Java – Метод Character.toString()
- 15. Java – Строки
- 15.1. Java – Метод charAt()
- 15.2. Java – Метод compareTo()
- 15.3. Java – Метод compareToIgnoreCase()
- 15.4. Java – Метод concat()
- 15.5. Java – Метод contentEquals()
- 15.6. Java – Метод copyValueOf()
- 15.7. Java – Метод endsWith()
- 15.8. Java – Метод equals()
- 15.9. Java – Метод equalsIgnoreCase()
- 15.10. Java – Метод getBytes()
- 15.11. Java – Метод getChars()
- 15.12. Java – Метод hashCode()
- 15.13. Java – Метод indexOf()
- 15.14. Java – Метод intern()
- 15.15. Java – Метод lastIndexOf()
- 15.16. Java – Метод length()
- 15.17. Java – Метод matches()
- 15.18. Java – Метод regionMatches()
- 15.19. Java – Метод replace()
- 15.20. Java – Метод replaceAll()
- 15.21. Java – Метод replaceFirst()
- 15.22. Java – Метод split()
- 15.23. Java – Метод startsWith()
- 15.24. Java – Метод subSequence()
- 15.25. Java – Метод substring()
- 15.26. Java – Метод toCharArray()
- 15.27. Java – Метод toLowerCase()
- 15.28. Java – Метод toString()
- 15.29. Java – Метод toUpperCase()
- 15.30. Java – Метод trim()
- 15.31. Java – Метод valueOf()
- 15.32. Java – Классы StringBuilder и StringBuffer
- 15.32.1. Java – Метод append()
- 15.32.2. Java – Метод reverse()
- 15.32.3. Java – Метод delete()
- 15.32.4. Java – Метод insert()
- 15.32.5. Java – Метод replace()
- 16. Java – Массивы
- 17. Java – Дата и время
- 18. Java – Регулярные выражения
- 19. Java – Методы
- 20. Java – Потоки ввода/вывода, файлы и каталоги
- 20.1. Java – Класс ByteArrayInputStream
- 20.2. Java – Класс DataInputStream
- 20.3. Java – Класс ByteArrayOutputStream
- 20.4. Java – Класс DataOutputStream
- 20.5. Java – Класс File
- 20.6. Java – Класс FileReader
- 20.7. Java – Класс FileWriter
- 21. Java – Исключения
- 21.1. Java – Встроенные исключения
- 22. Java – Вложенные и внутренние классы
- 23. Java – Наследование
- 24. Java – Переопределение
- 25. Java – Полиморфизм
- 26. Java – Абстракция
- 27. Java – Инкапсуляция
- 28. Java – Интерфейсы
- 29. Java – Пакеты
- 30. Java – Структуры данных
- 30.1. Java – Интерфейс Enumeration
- 30.2. Java – Класс BitSet
- 30.3. Java – Класс Vector
- 30.4. Java – Класс Stack
- 30.5. Java – Класс Dictionary
- 30.6. Java – Класс Hashtable
- 30.7. Java – Класс Properties
- 31. Java – Коллекции
- 31.1. Java – Интерфейс Collection
- 31.2. Java – Интерфейс List
- 31.3. Java – Интерфейс Set
- 31.4. Java – Интерфейс SortedSet
- 31.5. Java – Интерфейс Map
- 31.6. Java – Интерфейс Map.Entry
- 31.7. Java – Интерфейс SortedMap
- 31.8. Java – Класс LinkedList
- 31.9. Java – Класс ArrayList
- 31.10. Java – Класс HashSet
- 31.11. Java – Класс LinkedHashSet
- 31.12. Java – Класс TreeSet
- 31.13. Java – Класс HashMap
- 31.14. Java – Класс TreeMap
- 31.15. Java – Класс WeakHashMap
- 31.16. Java – Класс LinkedHashMap
- 31.17. Java – Класс IdentityHashMap
- 31.18. Java – Алгоритмы Collection
- 31.19. Java – Iterator и ListIterator
- 31.20. Java – Comparator
- 32. Java – Дженерики
- 33. Java – Сериализация
- 34. Java – Сеть
- 34.1. Java – Обработка URL
- 35. Java – Отправка Email
- 36. Java – Многопоточность
- 36.1. Java – Синхронизация потоков
- 36.2. Java – Межпоточная связь
- 36.3. Java – Взаимная блокировка потоков
- 36.4. Java – Управление потоками
- 37. Java – Основы работы с апплетами
- 38. Java – Javadoc
milten15 / Подсчёт количество букв в строке[charAt(i)].java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
| import java . io . BufferedReader ; |
| import java . io . InputStreamReader ; |
| import java . util . ArrayList ; |
| /* Количество букв |
| Ввести с клавиатуры 10 строчек и подсчитать в них количество различных букв (для 33 букв алфавита). Вывести результат на экран. |
| Пример вывода: |
| а 5 |
| б 8 |
| в 3 |
| г 7 |
| д 0 |
| … |
| я 9 |
| */ |
| public class Solution |
| public static void main ( String [] args ) throws Exception |
| BufferedReader reader = new BufferedReader ( new InputStreamReader ( System . in )); |
| //алфавит |
| String abc = «абвгдеёжзийклмнопрстуфхцчшщъыьэюя» ; |
| char [] abcArray = abc . toCharArray (); |
| ArrayList < Character >alphabet = new ArrayList < Character >(); |
| for ( int i = 0 ; i < abcArray . length ; i ++) |
| alphabet . add ( abcArray [ i ]); |
| > |
| //ввод строк |
| ArrayList < String >list = new ArrayList < String >(); |
| for ( int i = 0 ; i < 10 ; i ++) |
| String s = reader . readLine (); |
| list . add ( s . toLowerCase ()); |
| > |
| //напишите тут ваш код |
| for ( Character character : alphabet ) |
| int count = 0 ; |
| for ( String s : list ) |
| for ( int i = 0 ; i < s . length (); i ++) |
| if ( s . charAt ( i ) == character ) |
| count ++; |
| > |
| > |
| > |
| System . out . println ( character + » » + count ); |
| > |
| > |
| > |
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment