按首字母分组(中文、英文)

按首字母分组(中文、英文)

1.导入jar包

<!--汉字转拼音-->
<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.1</version>
</dependency>

2.工具类,中文拼音分组

 /**
     * 获取姓名全拼和首字母
     *
     * @param chinese 汉语名称
     * @return fullPinyin : 全拼        simplePinyin : 首字母  groupPinyin:微信用户组第一个字母
     * @throws BadHanyuPinyinOutputFormatCombination
     */
    public static Map<String, String> changeChinesePinyin(String chinese) throws BadHanyuPinyinOutputFormatCombination {
        Map<String, String> pinyin = new HashMap<String, String>();

        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        format.setVCharType(HanyuPinyinVCharType.WITH_V);

        StringBuffer fullPinyin = new StringBuffer();
        StringBuffer simplePinyin = new StringBuffer();
        StringBuffer firstPinyin = new StringBuffer();

        char[] chineseChar = chinese.toCharArray();
        for (int i = 0; i < chineseChar.length; i++) {
            String[] str = null;
            try {
                str = PinyinHelper.toHanyuPinyinStringArray(chineseChar[i],
                        format);
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            if (str != null) {
                if (str.length == 0) {
                    continue;
                }
                fullPinyin = fullPinyin.append(str[0].toString());
                simplePinyin = simplePinyin.append(str[0].charAt(0));

            }
            if (str == null) {
                String regex = "^[0-9]*[a-zA-Z]*+$";
                Pattern pattern = Pattern.compile(regex);
                Matcher m = pattern.matcher(String.valueOf(chineseChar[i]));
                if (m.find()) {
                    fullPinyin = fullPinyin.append(chineseChar[i]);
                    simplePinyin = simplePinyin.append(chineseChar[i]);
                }
            }
        }
        String[] name = PinyinHelper.toHanyuPinyinStringArray(chineseChar[0], format);
        firstPinyin = firstPinyin.append(name[0].charAt(0));
        pinyin.put("fullPinyin", fullPinyin.toString());
        pinyin.put("simplePinyin", simplePinyin.toString().toUpperCase());
        pinyin.put("groupPinyin", firstPinyin.toString().toUpperCase());
        return pinyin;
    }

    /**
     * 按拼音首字母分组
     *
     * @param list
     * @return
     * @throws BadHanyuPinyinOutputFormatCombination
     */
    public static Map<String, Object> getCodeGroup(List<String> list) throws BadHanyuPinyinOutputFormatCombination {
        Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
        //按字母排序
        Collections.sort(list, com);
        //输出26个字母
        Map<String, Object> map = new TreeMap<String, Object>();
        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);
                }
                System.out.println(str);
            }
            map.put(word, letter);
        }
        System.out.println(map);
        return map;
    }

英文分组

/**
     * 按英文首字母分组
     *
     * @param list
     * @return
     * @throws BadHanyuPinyinOutputFormatCombination
     */
    public static Map<String, Object> getCodeGroupEn(List<String> list) {
        //输出26个字母
        Map<String, Object> map = new TreeMap<String, Object>();
        for (int i = 1; i <= 26; i++) {
            String word = String.valueOf((char) (96 + i)).toUpperCase();
            //循环找出首字母一样的数据
            List<String> codeList = new ArrayList<String>();
            for(String str : list){
                char[] letters = str.toCharArray();
                for(char letter : letters){
                    if(String.valueOf(letter).equals(word)){
                        codeList.add(str);
                    }
                }
            }
            map.put(word, codeList);
        }
        System.out.println(map);
        return map;
    }
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值