1前書き

この短いチュートリアルでは、

String

をタイトルケース形式にJavaで変換する方法を説明します。

カスタムメソッドを実装するさまざまな方法を説明します。また、サードパーティのライブラリを使用してそれを実行する方法も説明します。


2コアJavaソリューション


2.1.

String

文字を繰り返し処理する


String

をタイトルケースに変換する1つの方法は、

String

のすべての文字を反復処理することです。

そうするために、単語の区切りを見つけたら、次の文字を大文字にします。その後、次の単語の区切りに達するまで、残りの文字を小文字に変更します。

単語の区切り文字として空白を使用して、このソリューションを実装しましょう。

public static String convertToTitleCaseIteratingChars(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    StringBuilder converted = new StringBuilder();

    boolean convertNext = true;
    for (char ch : text.toCharArray()) {
        if (Character.isSpaceChar(ch)) {
            convertNext = true;
        } else if (convertNext) {
            ch = Character.toTitleCase(ch);
            convertNext = false;
        } else {
            ch = Character.toLowerCase(ch);
        }
        converted.append(ch);
    }

    return converted.toString();
}

ご覧のとおり、変換を行うには

Character.toTitleCase

メソッドを使用します。これは、** Unicodeの

Character

と等価のタイトルケースをチェックするためです。

これらの入力を使用してこの方法をテストすると、

tHis IS a tiTLe
tHis, IS a   tiTLe

次のような期待通りの出力が得られます。

This Is A Title
This, Is A   Title


2.2. 単語に分割する

これを行うもう1つの方法は、

String

を単語に分割し、すべての単語をタイトルの大文字と小文字に変換し、最後に同じ単語の区切り文字を使用してすべての単語を結合することです。

それをコードの中で見てみましょう。ここでも空白を単語の区切り文字として使い、役に立つ

Stream

APIを使います。

private static final String WORD__SEPARATOR = " ";

public static String convertToTitleCaseSplitting(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    return Arrays
      .stream(text.split(WORD__SEPARATOR))
      .map(word -> word.isEmpty()
        ? word
        : Character.toTitleCase(word.charAt(0)) + word
          .substring(1)
          .toLowerCase())
      .collect(Collectors.joining(WORD__SEPARATOR));
}

以前と同じ入力を使用すると、まったく同じ出力が得られます。

This Is A Title
This, Is A   Title


3 Apache Commonsを使う

独自のカスタムメソッドを実装したくない場合は、Apache Commonsライブラリを使用できます。このライブラリの設定はこのリンクで説明されています:/string-processing-commons-lang[article]。

これは、

capitalizeFully()メソッドを持つ

WordUtils__クラスを提供します。

public static String convertToTileCaseWordUtilsFull(String text) {
    return WordUtils.capitalizeFully(text);
}

ご覧のとおり、これは非常に使いやすく、以前と同じ入力でテストした場合も同じ結果になります。

This Is A Title
This, Is A   Title

また、

WordUtils

クラスは、

capitalizeFully()と同様に機能する** 別の

__capitalize()メソッドを提供します。ただし、各単語の最初の文字が変更されるだけです。これは、残りの文字を小文字に変換しないことを意味します。

これを使用する方法を見てみましょう。

public static String convertToTileCaseWordUtils(String text) {
    return WordUtils.capitalize(text);
}

それでは、以前と同じ入力でテストした場合、これらの異なる出力が得られます。

THis IS A TiTLe
THis, IS A   TiTLe


4 ICU4J

を使用する

私たちが使用できるもう1つのライブラリは、Unicodeとグローバリゼーションのサポートを提供するICU4Jです。

それを使用するには、この依存関係をプロジェクトに追加する必要があります。

<dependency>
    <groupId>com.ibm.icu</groupId>
    <artifactId>icu4j</artifactId>
    <version>61.1</version>
</dependency>

最新バージョンはhttps://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22icu4j%22%20AND%20g%3A%22com.ibm.icu%22[here]にあります。

このライブラリは

WordUtils

と非常によく似た動作をしますが、

String

をどのように分割したいのかをメソッドに指示するために

__BreakIterator

__を指定することができます。

public static String convertToTitleCaseIcu4j(String text) {
    if (text == null || text.isEmpty()) {
        return text;
    }

    return UCharacter.toTitleCase(text, BreakIterator.getTitleInstance());
}

ご覧のとおり、タイトルを扱うための特定の

BreakIterator

があります。


  • BreakIterator

    を指定しないと、Unicode ** のデフォルトが使用されます。この場合、同じ結果が生成されます。

また、このメソッドを使用すると、ロケール固有の変換を実行するために、変換している

String

の____Localeを指定できます。


5結論

この短い記事では、

String

をJavaでタイトルケース形式に変換する方法を説明しました。最初にカスタム実装を使用し、その後で外部ライブラリを使用してそれを実行する方法を示しました。

いつものように、例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[over on GitHub]から入手可能です。