package com.ylx.common.utils; import com.github.stuxuhai.jpinyin.PinyinException; import com.github.stuxuhai.jpinyin.PinyinFormat; import com.github.stuxuhai.jpinyin.PinyinHelper; import java.text.Collator; import java.util.*; /** * @Description * @Author lgx * @Time 2023/4/17 */ public class CityChineseUtil { /** * 获取姓名全拼和首字母 * PinyinFormat:WITH_TONE_MARK(声调模式),WITH_TONE_NUMBER(数字代表声调模式),WITHOUT_TONE(无声调模式) * @param chinese 汉语名称 * @return fullPinyin : 全拼 simplePinyin : 首字母 groupPinyin:微信用户组第一个字母 * @throws PinyinException */ public static Map changeChinesePinyin(String chinese) throws Exception { Map pinyin = new HashMap(); //将中文转化成拼音(全拼) String fullPinyin = PinyinHelper.convertToPinyinString(chinese,"", PinyinFormat.WITHOUT_TONE); //将中文转化为简拼模式(各汉字第一个字母组成) String simplePinyin = PinyinHelper.getShortPinyin(chinese); //首字母 String firstPinyin = String.valueOf(simplePinyin.charAt(0)); pinyin.put("fullPinyin", fullPinyin); pinyin.put("simplePinyin", simplePinyin.toUpperCase()); pinyin.put("groupPinyin", firstPinyin.toUpperCase()); return pinyin; } /** * 按拼音首字母分组 * @param list * @return */ public static Map> getCodeGroup(List list) throws Exception{ Comparator com = Collator.getInstance(Locale.CHINA); //按字母排序 Collections.sort(list, com); //输出26个字母 Map> map = new TreeMap>(); for(int i=1;i<=26;i++){ String word = String. valueOf((char) (96 + i)). toUpperCase(); //循环找出首字母一样的数据 List letter = new ArrayList(); for (String str : list) { String code = changeChinesePinyin(str).get("groupPinyin"); if(word.equals(code)) { letter.add(str); } } map.put(word, letter); } return map; } // String str = "长沙市"; // //设置声调表示格式 // System.out.println(PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITH_TONE_MARK)); // nǐ,hǎo,shì,jiè // //数字表示声调 // System.out.println(PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITH_TONE_NUMBER)); // ni3,hao3,shi4,jie4 // //无声调 // System.out.println( PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITHOUT_TONE)); // ni,hao,shi,jie // //获取拼音首字母 // System.out.println(PinyinHelper.getShortPinyin(str)); // nhsj // //判断是否多音字 // System.out.println(PinyinHelper.hasMultiPinyin('啊'));//true }