/* * 練習問題22.3 p.560 * 入力文字列に出現した文字の上位バイト(上位8ビット)ごとにBitSetオブジェクトをHashMapに保存するようにしなさい。 * 各BitSetオブジェクトは、特定の上位バイトを持っている文字の下位バイトを保存します。 */ package ch22.ex22_03; import java.util.BitSet; import java.util.HashMap; public class EachUpperCharacter { HashMap<Integer, BitSet> map = new HashMap<Integer, BitSet>(); public EachUpperCharacter(String str) { BitSet[] tmp = new BitSet[(int)Math.pow(2, 8)]; for (int i = 0; i < (int)Math.pow(2, 8); i++) { tmp[i] = new BitSet(); } int j = 0; for (int i = 0; i < str.length(); i++) { for (j = 0; j < ((int) Math.pow(2, 8) - 1); j++) { if ((str.charAt(i) & j << 8) > 0 || (j == 0 && str.charAt(i) >> 8 == 0 )) { tmp[j].set(str.charAt(i) & 255); break; } } map.put(j, tmp[j]); } } public void showSpecifiedSet(int specifiedSet) { if (map.containsKey(specifiedSet)) { System.out.print(specifiedSet + ": "); BitSet tmp = map.get(specifiedSet); String desc = "["; for (int i = tmp.nextSetBit(0); i >= 0; i = tmp.nextSetBit(i + 1)) { desc += (char) (i | specifiedSet << 8); } System.out.println(desc + "]"); } else { ; } } public static void main(String[] args) { EachUpperCharacter test = new EachUpperCharacter("!/][\test\\ªఌฬℍ"); for (int i = 0; i < (int) Math.pow(2, 8); i++) { test.showSpecifiedSet(i); } } }