在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
。
参考:
最新评论
我的是ipv4网络,如何使用直播源啊!
我今天试了,不想啊,我的是新疆昌吉移动的网络。
收不到验证码电报
现在充值29起了