CityChineseUtil.java 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.ylx.common.utils;
  2. import com.github.stuxuhai.jpinyin.PinyinException;
  3. import com.github.stuxuhai.jpinyin.PinyinFormat;
  4. import com.github.stuxuhai.jpinyin.PinyinHelper;
  5. import java.text.Collator;
  6. import java.util.*;
  7. /**
  8. * @Description
  9. * @Author lgx
  10. * @Time 2023/4/17
  11. */
  12. public class CityChineseUtil {
  13. /**
  14. * 获取姓名全拼和首字母
  15. * PinyinFormat:WITH_TONE_MARK(声调模式),WITH_TONE_NUMBER(数字代表声调模式),WITHOUT_TONE(无声调模式)
  16. * @param chinese 汉语名称
  17. * @return fullPinyin : 全拼 simplePinyin : 首字母 groupPinyin:微信用户组第一个字母
  18. * @throws PinyinException
  19. */
  20. public static Map<String, String> changeChinesePinyin(String chinese) throws Exception {
  21. Map<String, String> pinyin = new HashMap<String, String>();
  22. //将中文转化成拼音(全拼)
  23. String fullPinyin = PinyinHelper.convertToPinyinString(chinese,"", PinyinFormat.WITHOUT_TONE);
  24. //将中文转化为简拼模式(各汉字第一个字母组成)
  25. String simplePinyin = PinyinHelper.getShortPinyin(chinese);
  26. //首字母
  27. String firstPinyin = String.valueOf(simplePinyin.charAt(0));
  28. pinyin.put("fullPinyin", fullPinyin);
  29. pinyin.put("simplePinyin", simplePinyin.toUpperCase());
  30. pinyin.put("groupPinyin", firstPinyin.toUpperCase());
  31. return pinyin;
  32. }
  33. /**
  34. * 按拼音首字母分组
  35. * @param list
  36. * @return
  37. */
  38. public static Map<String, List<String>> getCodeGroup(List<String> list) throws Exception{
  39. Comparator<Object> com = Collator.getInstance(Locale.CHINA);
  40. //按字母排序
  41. Collections.sort(list, com);
  42. //输出26个字母
  43. Map<String, List<String>> map = new TreeMap<String, List<String>>();
  44. for(int i=1;i<=26;i++){
  45. String word = String. valueOf((char) (96 + i)). toUpperCase();
  46. //循环找出首字母一样的数据
  47. List<String> letter = new ArrayList<String>();
  48. for (String str : list) {
  49. String code = changeChinesePinyin(str).get("groupPinyin");
  50. if(word.equals(code)) {
  51. letter.add(str);
  52. }
  53. }
  54. map.put(word, letter);
  55. }
  56. return map;
  57. }
  58. // String str = "长沙市";
  59. // //设置声调表示格式
  60. // System.out.println(PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITH_TONE_MARK)); // nǐ,hǎo,shì,jiè
  61. // //数字表示声调
  62. // System.out.println(PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITH_TONE_NUMBER)); // ni3,hao3,shi4,jie4
  63. // //无声调
  64. // System.out.println( PinyinHelper.convertToPinyinString(str, ",", PinyinFormat.WITHOUT_TONE)); // ni,hao,shi,jie
  65. // //获取拼音首字母
  66. // System.out.println(PinyinHelper.getShortPinyin(str)); // nhsj
  67. // //判断是否多音字
  68. // System.out.println(PinyinHelper.hasMultiPinyin('啊'));//true
  69. }