Подсчет количества вхождений символа

JavaBeginner
Практиковаться сейчас

Введение

В 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

Резюме

В этом практическом занятии мы рассмотрели следующие этапы:

  1. Итеративный подход - обход каждого символа для подсчета количества вхождений символа.
  2. Рекурсивный подход - использование рекурсии для подсчета количества вхождений символа.
  3. Java 8 Streams - использование Streams для подсчета количества вхождений символа.
  4. Внешние библиотеки - использование библиотек Guava и Apache для подсчета количества вхождений символа.

После завершения этого практического занятия вы должны лучше понять различные методы подсчета количества вхождений символа в строке.