1概要

Javaの

String

にあるcharの出現回数を数える方法はたくさんあります。

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


2 Core Java Lib

の使い方


2.1.


命令的アプローチ

一部の開発者は、コアJavaを使用することを好むかもしれません。 String内のcharの出現回数を数える方法はたくさんあります。

簡単で素朴なアプローチから始めましょう。

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. Java 8の機能の使い方

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

内の文字またはサブストリングのカウントにも使用できます。

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

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.5</version>
</dependency>

最新のバージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22org.apache.commons%22%20AND%20a%3A%22commons-lang3%22[で見つけることができます。 Maven Central]。


countMatches()

を使用して、 “elephant”文字列リテラルの ‘e’文字の数を数えましょう。

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


3.2. Guava

を使う

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

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>21.0</version>
</dependency>

最新バージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.google.guava%22%20AND%20a%3A%22guava%22[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);


4結論

この簡単なチュートリアルでは、String内の文字数を数えるためのさまざまな方法に焦点を当てました。それらのいくつかは純粋にJavaで設計されました。追加のライブラリが必要なものもありました。

私たちの推薦は

StringUtils

、GuavaまたはSpringからの既存のユーティリティを使うことです。しかし、普通のJavaだけを使うことを好むのであれば、この記事ではそれをJava 8でうまく実現する可能性をいくつか示します。

これらの例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[このGitHubプロジェクト]にあります。