Java 实现汉字按照首字母分组排序


一、实现思路:

1、将数据list 进行排序Collections,排序后是按照汉字字母排序的
2、循环找出26个字母,以字母为key,以list中相同首字母的数据为值(集合)

二、代码实现:

// 这里需要用到 pinyin4j-2.5.0.jar 这个汉字转拼音的jar包

/**
* 获取汉字串拼音,英文字符不变
*/
public static String getFullSpell(String chinese) {
    StringBuffer pybf = new StringBuffer();
    char[] arr = chinese.toCharArray();
    HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
    defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
    defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] > 128) {
            try {
                pybf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
        } else {
            pybf.append(arr[i]);
        }
    }
    return pybf.toString();
}

/**
* 将集合数据按照汉字首字母分组排序
*/
public static Map<String, Object> screenManufacturer(List<String> list) {
	try {
		Collator com = Collator.getInstance(java.util.Locale.CHINA);
	    // 按字母排序
		Collections.sort(list, com);
		// 输出26个字母
		Map<String, Object> map = new TreeMap<>();
		for (int i = 1; i < 27; i++) {
			String word = String.valueOf((char)(96 + i)).toUpperCase();
			// 循环找出 首字母一样的数据
			List<String> letter = new ArrayList<>();
			for (String str : list) {
				String pybf = getFullSpell(str);
                                String zm = pybf.substring(0, 1);
				if (word.equals(zm)) {
					letter.add(str);
				}
			}
			map.put(word, letter);
		}
		return map;
	} catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

样例:

{
    "A": ["阿拉伯"],
    "B": [],
    "C": [],
    "D": [],
    "E": [],
    "F": [],
    "G": [],
    "H": [],
    "I": [],
    "J": [],
    "K": [],
    "L": ["李四", "李五"],
    "M": [],
    "N": [],
    "O": [],
    "P": [],
    "Q": [],
    "R": [],
    "S": [],
    "T": [],
    "U": [],
    "V": [],
    "W": [],
    "X": [],
    "Y": [],
    "Z": ["张三"]
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM