ふわ

2021年04月04日に参加

学習履歴詳細

【3回目】JavaCoding Problems サロゲートペアが少し理解できた。

サロゲートペアとは

  • unicode文字を表すために16bitのコードポイント2つでunicodeの1文字を表す仕組みと理解した。
  • 上記のコードポイントはhigh surrogateとlow surrogateと呼ばれ、16進数の範囲が決まっている。

Javaとサロゲートペア

  • サロゲートペアのコードポイント(32bit)をCharacter.toChars()に渡すと要素を2つ持つChar型の配列が帰ってくる。
  • 上記をString.valueOf()に渡すとString型の文字列が1文字で帰ってくる。
public static Map<String, Integer> countDuplicateCharacters(String str) {
        Map<String, Integer> result = new HashMap<>();

        for (int i = 0; i < str.length(); i++){
            //サロゲートペアで32bitが帰ってくる
            int cp = str.codePointAt(i);
            //32bitをchar型の配列に変えて、Stringに変換する
            String ch = String.valueOf(Character.toChars(cp));
            if (Character.charCount(cp) == 2) {
                //2 はサロゲートペアを表す
                i++;
            }
            result.compute(ch, (k, v) -> (v == null) ? 1 : ++v);
        }

        return result;
    }

気になること

  • LinkedHashMapの特徴が気になる。
Java

2023年06月08日(木)

1.5時間