広告

Java : Normalizer (テキストの正規化) - API使用例

Normalizer (Java SE 22 & JDK 22) の使い方まとめです。
ほとんどのメソッドにサンプルコードがあります。
API仕様書のおともにどうぞ。


概要

このクラスは、テキストのソートや検索が容易になるようにUnicodeテキストをそれと等価な合成形式または分解形式に変換する、normalizeメソッドを提供します。 normalizeメソッドは、「Unicode Standard Annex#15-Unicode Normalization Forms」に記述されている標準の正規化形式をサポートしています。

クラス構成

Normalizer クラスは、ユニコードテキストを正規化します。
例えば、10を丸で囲った " ⑩ " という文字は、" 10 " に正規化できます。

用途としては、検索システムでユーザが ⑩ と入力した場合に 10 もヒットさせたい、というときに使えるかもしれません。

final var values = Normalizer.Form.values();
System.out.println(Arrays.toString(values)); // [NFD, NFC, NFKD, NFKC]

final var sources = List.of("Å", "¼", "⑩", "㌀");

for (final var src : sources) {
    System.out.println("----------");
    System.out.println("src : " + src);

    for (final var form : Normalizer.Form.values()) {
        if (!Normalizer.isNormalized(src, form)) {
            System.out.println("  " + form + " : " + Normalizer.normalize(src, form));
        }
    }
}

// 結果
// ↓
//----------
//src : Å
//  NFD : Å
//  NFC : Å
//  NFKD : Å
//  NFKC : Å
//----------
//src : ¼
//  NFKD : 1⁄4
//  NFKC : 1⁄4
//----------
//src : ⑩
//  NFKD : 10
//  NFKC : 10
//----------
//src : ㌀
//  NFKD : アパート
//  NFKC : アパート

メソッド

static boolean isNormalized (CharSequence src, Normalizer.Form form)

指定されたchar値のシーケンスが正規化されているかどうかを判定します。

final var src = "⑩";
final var form = Normalizer.Form.NFKC;

System.out.println(Normalizer.isNormalized(src, form)); // false

final var normalized = Normalizer.normalize(src, form);
System.out.println(normalized); // 10
System.out.println(Normalizer.isNormalized(normalized, form)); // true

static String normalize (CharSequence src, Normalizer.Form form)

char値のシーケンスを正規化します。

final var src = "⑩";
final var form = Normalizer.Form.NFKC;

System.out.println(Normalizer.isNormalized(src, form)); // false

final var normalized = Normalizer.normalize(src, form);
System.out.println(normalized); // 10
System.out.println(Normalizer.isNormalized(normalized, form)); // true

関連記事

ページの先頭へ