import java.text.Normalizer;

public class NormalizerSample1 {
    public NormalizerSample1() {
        normalize("が");
        normalize("\u304b\u3099");
        normalize("ア");
        normalize("ｱ");
        normalize("神");
        normalize("\ufa19");
    }

    private void normalize(String text) {
        // オリジナルの文字列
        System.out.print(text + ": ");
        printHex(text);

        // 正規分解
        String normalizedText = Normalizer.normalize(text, Normalizer.Form.NFD);
        printHex(normalizedText, Normalizer.Form.NFD);

        // 互換分解
        normalizedText = Normalizer.normalize(text, Normalizer.Form.NFKD);
        printHex(normalizedText, Normalizer.Form.NFKD);

        // 正規合成
        normalizedText = Normalizer.normalize(text, Normalizer.Form.NFC);
        printHex(normalizedText, Normalizer.Form.NFC);

        // 互換合成
        normalizedText = Normalizer.normalize(text, Normalizer.Form.NFKC);
        printHex(normalizedText, Normalizer.Form.NFKD);

        System.out.printf("%n");
    }

    private void printHex(String text, Normalizer.Form form) {
        System.out.printf("%4s: ", form);
        printHex(text);
    }

    private void printHex(String text) {
        for (char c: text.toCharArray()) {
            System.out.printf("%x ", (int)c);
        }
        System.out.printf("%n");
    }

    public static void main(String[] args) {
        NormalizerSample1 sample = new NormalizerSample1();
    }
}

