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<String, String> changeChinesePinyin(String chinese) throws Exception {
        Map<String, String> pinyin = new HashMap<String, String>();

        //将中文转化成拼音（全拼）
        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<String, List<String>> getCodeGroup(List<String> list) throws Exception{
        Comparator<Object> com = Collator.getInstance(Locale.CHINA);
        //按字母排序
        Collections.sort(list, com);
        //输出26个字母
        Map<String, List<String>> map = new TreeMap<String, List<String>>();
        for(int i=1;i<=26;i++){
            String word = String. valueOf((char) (96 + i)). toUpperCase();
            //循环找出首字母一样的数据
            List<String> letter = new ArrayList<String>();
            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
}