Введение
В Java мы можем легко подсчитывать количество раз, которое определенный символ встречается в строке. В этом практическом занятии мы проведем вас через разные методы, которые вы можете использовать для подсчета количества вхождений символа в строку.
Итеративный подход
Мы можем использовать итеративный подход для обхода каждого символа в строке, чтобы подсчитать количество раз, которое определенный символ встречается.
Создайте Java-файл с именем CountOccurrences.java в директории ~/project и скопируйте в файл следующие содержимое:
public class CountOccurrences {
public static int countChars(String str, char c) {
int count = 0;
for(int i = 0; i < str.length(); i++) {
char currChar = str.charAt(i);
if(currChar == c)
count += 1;
}
return count;
}
public static void main(String[] args) {
String s = "Java is an awesome language!";
int charCountOfA = countChars(s, 'a');
int charCountOfG = countChars(s, 'g');
int charCountOfE = countChars(s, 'e');
System.out.println("The String is: " + s);
System.out.println("Character count of 'a': " + charCountOfA);
System.out.println("Character count of 'g': " + charCountOfG);
System.out.println("Character count of 'e': " + charCountOfE);
}
}
Для компиляции и запуска программы выполните следующие команды в терминале:
cd ~/project
javac CountOccurrences.java && java CountOccurrences
Результат должен быть таким:
The String is: Java is an awesome language!
Character count of 'a': 6
Character count of 'g': 2
Character count of 'e': 3
Рекурсивный подход
Мы также можем использовать рекурсивный подход для подсчета количества вхождений символа в строке. Это включает в себя использование двух методов, первый из которых является рекурсивным, а второй вызывает первый.
Скопируйте и вставьте следующий кодовый блок после кода из шага 1 в файл CountOccurrences.java:
public static int countCharsRecur(String str, char c, int idx) {
if(idx >= str.length())
return 0;
else {
int count = 0;
if(str.charAt(idx) == c)
count = 1;
return count + countCharsRecur(str, c, idx + 1);
}
}
public static int countChars(String s, char c) {
return countCharsRecur(s, c, 0);
}
Для компиляции и запуска обновленной программы выполните те же команды, что и в шаге 1:
cd ~/project
javac CountOccurrences.java && java CountOccurrences
Использование Java 8 Streams
Мы можем использовать Java 8 Streams для подсчета количества вхождений символа в строке.
Скопируйте и вставьте следующий кодовый блок после кода из шага 2 в файл CountOccurrences.java:
public static void usingStreams(String s) {
int charCountOfA = (int) s.chars().filter(c -> c == 'a').count();
int charCountOfG = (int) s.chars().filter(c -> c == 'g').count();
int charCountOfE = (int) s.chars().filter(c -> c == 'e').count();
System.out.println("The String is: " + s);
System.out.println("Character count of 'a': " + charCountOfA);
System.out.println("Character count of 'g': " + charCountOfG);
System.out.println("Character count of 'e': " + charCountOfE);
}
Для использования метода Java 8 Streams добавьте следующую строку кода в метод main после кода из шага 2:
usingStreams(s);
Для компиляции и запуска обновленной программы выполните те же команды, что и в шаге 1:
cd ~/project
javac CountOccurrences.java && java CountOccurrences
Использование внешних библиотек
Мы можем использовать внешние библиотеки для подсчета количества вхождений символа в строке.
Использование библиотеки Guava
Библиотека Guava предоставляет класс CharMatcher, который может подсчитывать количество вхождений заданного символа.
Добавьте следующий кодовый блок после кода из шага 3:
public static int usingGuava(String str) {
CharMatcher cm = CharMatcher.is('a');
int charCountOfA = cm.countIn(str);
System.out.println("Character count of 'a': " + charCountOfA);
return charCountOfA;
}
Для использования библиотеки Guava добавьте следующие импорты в начало файла CountOccurrences.java:
import com.google.common.base.CharMatcher;
В методе main вызовите метод usingGuava с параметром строки:
usingGuava(s);
Для компиляции и запуска обновленной программы выполните те же команды, что и в шаге 1:
cd ~/project
javac -cp ".:./lib/*" CountOccurrences.java && java -cp ".:./lib/*" CountOccurrences
Использование библиотеки Apache
Библиотека Apache Commons предоставляет класс StringUtils, который имеет удобный метод countMatches(), который принимает символ и строку в качестве входных данных и возвращает количество вхождений этого символа в этой строке в качестве результата.
Добавьте следующий кодовый блок после кода из шага 4:
public static int usingApache(String str) {
int charCountOfA = StringUtils.countMatches(str, 'a');
int charCountOfG = StringUtils.countMatches(str, 'g');
int charCountOfE = StringUtils.countMatches(str, 'e');
System.out.println("Character count of 'a': " + charCountOfA);
System.out.println("Character count of 'g': " + charCountOfG);
System.out.println("Character count of 'e': " + charCountOfE);
return charCountOfA;
}
Для использования библиотеки Apache Commons добавьте следующий импорт в начало файла CountOccurrences.java:
import org.apache.commons.lang3.StringUtils;
В методе main вызовите метод usingApache с параметром строки:
usingApache(s);
Для компиляции и запуска обновленной программы выполните те же команды, что и в шаге 1, с добавленным классом путем:
cd ~/project
javac -cp ".:./lib/*" CountOccurrences.java && java -cp ".:./lib/*" CountOccurrences
Резюме
В этом практическом занятии мы рассмотрели следующие этапы:
- Итеративный подход - обход каждого символа для подсчета количества вхождений символа.
- Рекурсивный подход - использование рекурсии для подсчета количества вхождений символа.
- Java 8 Streams - использование Streams для подсчета количества вхождений символа.
- Внешние библиотеки - использование библиотек Guava и Apache для подсчета количества вхождений символа.
После завершения этого практического занятия вы должны лучше понять различные методы подсчета количества вхождений символа в строке.



