文字列中のCharの出現回数を数える

文字列内のCharの発生をカウントする

1. 概要

JavaのStringでのcharの出現数をカウントする方法はたくさんあります。

この簡単な記事では、最初にコアJavaライブラリを使用し、次にSpringやGuavaなどの他のライブラリやフレームワークを使用して文字をカウントする方法のいくつかの例に焦点を当てます。

2. Core JavaLibの使用

2.1. 命令型アプローチ

一部の開発者は、コアJavaの使用を好む場合があります。 文字列内の文字の出現回数を数える方法はたくさんあります。

シンプルで素朴なアプローチから始めましょう。

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);

驚くことではありませんが、これは機能しますが、驚くべきことではありませんが、これを実現するより良い方法があります。

2.2. 再帰の使用

それほど明白ではないが、まだ興味深い解決策は再帰を使用することです:

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)

2.4. 正規表現を使用する

別の方法は、正規表現を使用することです。

Pattern pattern = Pattern.compile("[^e]*e");
Matcher matcher = pattern.matcher("elephant");
int count = 0;
while (matcher.find()) {
    count++;
}

assertEquals(2, count);

このソリューションは技術的には正しいですが、文字列内の文字の出現回数を見つけるなどの単純な問題を解決するために非常に強力な正規表現を使用するのはやり過ぎなので、最適ではないことに注意してください。

2.5. Java8機能の使用

ここでは、Java 8で利用可能な新機能が非常に役立ちます。

ストリームとラムダを使用してカウントを実装しましょう。

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);

したがって、これは明らかにコアライブラリを使用した、よりクリーンで読みやすいソリューションです。

3. 外部ライブラリの使用

次に、外部ライブラリのユーティリティを利用するいくつかのソリューションを見てみましょう。

3.1. StringUtilsの使用

一般に、独自のソリューションを開発するよりも、既存のソリューションを使用する方が常に優れています。 commons.lang.StringUtilsクラスは、countMatches()メソッドを提供します。このメソッドは、指定されたStringの文字またはサブ文字列をカウントするために使用できます。

まず、適切な依存関係を含める必要があります。


    org.apache.commons
    commons-lang3
    3.5

最新バージョンはMaven Centralにあります。

ここで、countMatches()を使用して、「elephant」文字列リテラルの「e」文字の数を数えましょう。

int count = StringUtils.countMatches("elephant", "e");
assertEquals(2, count);

3.2. グアバの使用

グアバはイワナを数えるのにも役立ちます。 依存関係を定義する必要があります。


    com.google.guava
    guava
    21.0

最新バージョンはMaven Centralにあります。

Guavaが文字数のカウントにどのように役立つかを見てみましょう。

int count = CharMatcher.is('e').countIn("elephant");
assertEquals(2, count);

3.3. Springを使用する

当然、文字数を数えるためだけにSpringFrameworkをプロジェクトに追加することは意味がありません。 ただし、プロジェクトにすでに含まれている場合は、countOccurencesOf()メソッドを使用する必要があります。

int count = StringUtils.countOccurrencesOf("elephant", "e");
assertEquals(2, count);

4. 結論

このクイックチュートリアルでは、文字列内の文字をカウントするさまざまな方法に注目しました。 それらのいくつかは、純粋にJavaで設計されました。いくつかの追加ライブラリが必要です。

StringUtils、Guava、またはSpringの既存のユーティリティを使用することをお勧めします。 ただし、プレーンなJavaのみを使用する場合は、この記事でJava 8でそれを実現する可能性がいくつかあります。

これらの例の完全なソースコードは、this GitHub projectで入手できます。