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