JAVA 中文数字转案例博数字并排序
- 工具类
/**
* 将中文数字转换为 阿拉伯数字
*
* @param chineseNumber 中文数字字符串
* @return 转换后的阿拉伯数字
* @author Tuzi294
*/
public static Integer chineseNumber2Int(String chineseNumber) {
String aval = "零一二三四五六七八九";
String bval = "十百千万亿";
int[] bnum = {10, 100, 1000, 10000, 100000000};
Integer num = 0;
char[] arr = chineseNumber.toCharArray();
int len = arr.length;
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < len; i++) {
char s = arr[i];
//跳过零
if (s == '零') {
continue;
}
//用下标找到对应数字
int index = bval.indexOf(s);
//如果不在bval中,即当前字符为数字,直接入栈
if (index == -1) {
stack.push(aval.indexOf(s));
} else { //当前字符为单位。
int tempsum = 0;
int val = bnum[index];
//如果栈为空则直接入栈
if (stack.isEmpty()) {
stack.push(val);
continue;
}
//如果栈中有比val小的元素则出栈,累加,乘N,再入栈
while (!stack.isEmpty() && stack.peek() < val) {
tempsum += stack.pop();
}
//判断是否经过乘法处理
if (tempsum == 0) {
stack.push(val);
} else {
stack.push(tempsum * val);
}
}
}
//计算最终的和
while (!stack.isEmpty()) {
num += stack.pop();
}
return num;
}
- 集合对象排序
Collections.sort(list, (a,b) -> {
return (NumberCompareUtils.chineseNumber2Int(a.getAge()) - NumberCompareUtils.chineseNumber2Int(b.getAge()));
});
NumberCompareUtils:是工具类类名