[JAVA]-中文根据拼音首字母排序

有些用户列表/品种列表等,常用A,B,C作为名称的搜索条件。

依赖

<dependency>
    <groupId>com.belerweb</groupId>
    <artifactId>pinyin4j</artifactId>
    <version>2.5.1</version>
</dependency>

工具类

public class PinYinUtils {

    /**
     * 获取汉字对应的拼音
     *
     * @param chinese 汉字串
     * @return
     */
    public static String getFullSpell(String chinese) {
        StringBuffer bf = new StringBuffer();

        char[] arr = chinese.toCharArray();
        HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
        defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
        defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > 128) {
                try {
                    bf.append(PinyinHelper.toHanyuPinyinStringArray(arr[i], defaultFormat)[0]);
                } catch (BadHanyuPinyinOutputFormatCombination e) {
                    e.printStackTrace();
                }
            } else {
                bf.append(arr[i]);
            }
        }

        return bf.toString();
    }
}

将查询的数据,重新进行处理

    /**
     * 封装根据拼音首字母的数据
     *
     * @param data
     * @return
     */
    private List<Map<String, Object>> getPinYinData(List<CpPetKind> data) {
        List<Map<String, Object>> list = new LinkedList<>();
        for (int i = 1; i <= 26; i++) {

            // 大写
            String big = String.valueOf((char) (96 + i)).toUpperCase();
            // 小写
            String little = big.toLowerCase();

            List<CpPetKind> initialsList = new LinkedList<>();
            for (int j = 0; j < data.size() - 1; j++) {
                CpPetKind petKind = data.get(j);

                String initials = PinYinUtils.getFullSpell(petKind.getBreed()).substring(0, 1);
                if (big.equals(initials) || little.equals(initials)) {
                    initialsList.add(petKind);
                }
            }

            Map<String, Object> tempMap = new HashMap<>();
            tempMap.put("initials", big);
            tempMap.put("kinds", initialsList);

            list.add(tempMap);
        }

        return list;
    }

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 xiaoxin1218@qq.com

文章标题:[JAVA]-中文根据拼音首字母排序

文章字数:289

本文作者:周信

发布时间:2021-03-22, 17:05:14

最后更新:2023-05-03, 10:25:35

原始链接:http://zx21.xyz/2021/03/22/JAVA-中文根据拼音首字母排序/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

可为我打赏鼓励~