获取中文首字母

一)有一个开源的jar可以使用:pinyin4j,在mvnrepository.com上搜索即可获取pom引用。

下面是自己写的一个简单实例,因为不解决汉字里的多音字问题,所以这里将一些特殊情况自己判断了。

private static Map<String,String> special = new HashMap<>();
    static {
        special.put("重庆","C");
    }

    /**
     * 提取每个汉字的首字母
     * 多音字不好判断
     * @param str 输入的字符串
     * @return String 输出的
     */
    public static String getPinYinFirstChar(String str) {
        if (!StringUtils.isBlank(str)){
            if (special.containsKey(str)){
                return special.get(str);
            }
            char[] charArray = str.toCharArray();
            if (charArray.length > 0){
                String[] pinyinArray = PinyinHelper.convertToPinyinArray(charArray[0]);
                if (pinyinArray != null) {
                    return String.valueOf(Character.toUpperCase(pinyinArray[0].charAt(0)));
                } else {
                    return String.valueOf(charArray[0]);
                }
            }
        }
        return StringUtils.EMPTY;
    }

2)引申一下

因为项目里需要根据某列排序,不只是根据首字母,例如 城市拼音分别为 hanzhong,handan,hankou,luoyang排序的话,要严格按照字母序排列:handan,hankou,hanzhong,luoyang。即遇到相等的话继续向后比较。此时根据 PinyinHelper.convertToPinyinArray 获取到全拼音,然后再自己定义一个比较方法:例如 comparator<.char[]>,比较两个字符数组即可。

posted @ 2021-05-19 15:35  江湖凶险  阅读(258)  评论(0编辑  收藏  举报