优米格
分享有营养的

在Java中如何对中文按照拼音/数字进行排序

BraUndress.png

在Java中对中文的排序比较复杂,涵盖了纯中文、中文中包含大写数字、中文包含阿拉伯数字等情形。

1.按照字母(拼音)进行排序

借助java.text.Collator

 // 按姓名首字母排序
 Collections.sort(staffInfoVMList, (o1, o2) -> Collator.getInstance(Locale.CHINESE).compare(o1.getUserName(), o2.getUserName()));

2.按照包含的中文大写数字排序

工具类:

 /**
     * 截取第一处的中文数字字符串
     *
     * @param originString
     * @return
     */
    public static String searchChineseNumber(String originString) {
        StringBuilder stringBuilder = new StringBuilder();
        boolean isFirst = true;
        String chineseNumStr = "零一二三四五六七八九十百千万亿";
        for (int i = 0; i < originString.length(); i++) {
            String tempStr = originString.substring(i, i + 1);
            if (chineseNumStr.contains(tempStr)) {
                stringBuilder.append(tempStr);
                if (isFirst) {
                    isFirst = false;
                }
            } else {
                if (!isFirst) {
                    break;
                }
            }
        }
        return stringBuilder.toString();
    }

排序:

// 班组中包含数字的排序
Collections.sort(resultMapList, (o1, o2) -> {
    String className1 = (String) o1.get("className");
    String className2 = (String) o2.get("className");
    String numStr1 = com.ruowei.xiaofang.common.StringUtils.searchChineseNumber(className1);
    String numStr2 = com.ruowei.xiaofang.common.StringUtils.searchChineseNumber(className2);
    long num1 = StringUtils.isBlank(numStr1) ? 0 : com.ruowei.xiaofang.common.StringUtils.chineseNumber2Int(numStr1);
    long num2 = StringUtils.isBlank(numStr2) ? 0 : com.ruowei.xiaofang.common.StringUtils.chineseNumber2Int(numStr2);
    return (int) (num1 - num2);
});

3.中文包含的阿拉伯数字

借助org.apache.commons.lang3.StringUtils.getDigits

参考:

  1. Java对List中的中文属性按照拼音排序
  2. StringUtils.getDigits
  3. 【Java】 包含中文数字的文字排序
赞(3)
未经允许禁止转载:优米格 » 在Java中如何对中文按照拼音/数字进行排序

评论 抢沙发

合作&反馈&投稿

商务合作、问题反馈、投稿,欢迎联系

广告合作侵权联系