【Java】文字列が漢字のみかを判定する方法

Javaで文字列が漢字のみで構成されているかを判定する方法について紹介します。日本語の文字列処理において、漢字の判定は重要な要素の一つです。この記事では、漢字の判定を行う具体的な方法と、そのサンプルコードを解説します。

漢字判定の基本原理

漢字はUnicodeの特定のブロックに属しています。これらのブロックを利用して、文字が漢字であるかどうかを判定することができます。Javaでは、Character.UnicodeBlockクラスを使って文字がどのブロックに属するかを調べることができます。

実装方法

以下に、文字列が漢字のみで構成されているかどうかを判定するためのサンプルコードを示します。このコードでは、文字列内の各文字をチェックし、それが漢字のUnicodeブロックに属しているかを確認します。

public class KanjiChecker {

    public static void main(String[] args) {
        String testString1 = "漢字";
        String testString2 = "漢字とひらがな";
        
        System.out.println(isKanjiOnly(testString1)); // true
        System.out.println(isKanjiOnly(testString2)); // false
    }

    public static boolean isKanjiOnly(String str) {
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (!isKanji(c)) {
                return false;
            }
        }
        return true;
    }

    public static boolean isKanji(char c) {
        Character.UnicodeBlock block = Character.UnicodeBlock.of(c);
        return block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS ||
               block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A ||
               block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B ||
               block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_C ||
               block == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_D ||
               block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS ||
               block == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT;
    }
}

このコードは、文字列が漢字のみで構成されているかどうかを判定するためのものです。まず、mainメソッドでテスト用の文字列を2つ定義しています。一つは漢字のみで構成された文字列「漢字」、もう一つは漢字とひらがなが混ざった文字列「漢字とひらがな」です。これらの文字列を使って、isKanjiOnlyメソッドが正しく動作するかを確認します。

isKanjiOnlyメソッドは、文字列の各文字をループでチェックし、その文字が漢字かどうかを判定します。具体的には、forループを使って文字列の各文字にアクセスし、isKanjiメソッドを呼び出して、その文字が漢字かどうかを調べます。一文字でも漢字でない文字が含まれている場合はfalseを返し、全ての文字が漢字であればtrueを返します。

次に、isKanjiメソッドでは、指定された文字が漢字のUnicodeブロックに属しているかどうかを判定します。このメソッドは、Character.UnicodeBlock.ofメソッドを使って文字のUnicodeブロックを取得し、それが漢字のUnicodeブロックのいずれかに該当するかをチェックします。具体的には、CJK統合漢字やその拡張ブロックに属しているかどうかを確認します。これにより、対象の文字が漢字であるかどうかを正確に判定できます。

まとめ

このようにして、isKanjiOnlyメソッドは文字列が漢字のみで構成されているかを効率的に判定し、結果を出力することができます。この方法は、Unicodeブロックを利用することで、確実に漢字を判別するための強力な手段となります。