|
|
//Copyright (c) 2017. 章钦豪. All rights reserved.
|
|
|
// 版权声明,表明代码的版权归属于章钦豪。
|
|
|
|
|
|
package com.monke.monkeybook.utils;
|
|
|
// 声明包名。
|
|
|
|
|
|
public class NumberUtil {
|
|
|
// 声明NumberUtil工具类,用于数字转换相关的工具方法。
|
|
|
|
|
|
/**
|
|
|
* 中文数字转阿拉伯数字
|
|
|
*/
|
|
|
|
|
|
private static int chineseNumber2Int(String chineseNumber){
|
|
|
// 定义一个私有静态方法,用于将中文数字转换为阿拉伯数字。
|
|
|
|
|
|
int result = 0;
|
|
|
// 用于存储转换结果。
|
|
|
|
|
|
int temp = 1;//存放一个单位的数字如:十万
|
|
|
// 临时存储一个单位的数值,如“十”则为10,“百”则为100。
|
|
|
|
|
|
int count = 0;//判断是否有chArr
|
|
|
// 用于计数“千”、“万”、“亿”等单位出现的次数。
|
|
|
|
|
|
char[] cnArr = new char[]{'一','二','三','四','五','六','七','八','九'};
|
|
|
// 包含中文数字0-9的数组。
|
|
|
|
|
|
char[] chArr = new char[]{'十','百','千','万','亿'};
|
|
|
// 包含中文单位“十”、“百”、“千”、“万”、“亿”的数组。
|
|
|
|
|
|
for (int i = 0; i < chineseNumber.length(); i++) {
|
|
|
// 遍历输入的中文数字字符串。
|
|
|
|
|
|
boolean b = true;//判断是否是chArr
|
|
|
// 标记当前字符是否属于单位数组chArr。
|
|
|
|
|
|
char c = chineseNumber.charAt(i);
|
|
|
// 获取当前遍历到的字符。
|
|
|
for (int j = 0; j < cnArr.length; j++) {
|
|
|
//非单位,即数字
|
|
|
// 检查当前字符是否为数字('一'到'九')。
|
|
|
|
|
|
if (c == cnArr[j]) {
|
|
|
if(0 != count){
|
|
|
//添加下一个单位之前,先把上一个单位值添加到结果中
|
|
|
// 如果count不为0,说明之前已经遇到了单位字符,需要先计算之前的数值。
|
|
|
result += temp;
|
|
|
// 将临时数值累加到结果中。
|
|
|
|
|
|
temp = 1;
|
|
|
// 重置临时数值为1。
|
|
|
|
|
|
count = 0;
|
|
|
// 重置计数器。
|
|
|
}
|
|
|
// 下标+1,就是对应的值
|
|
|
temp = j + 1;
|
|
|
// 将当前数字字符转换为对应的数值,并更新temp。
|
|
|
b = false;
|
|
|
// 标记当前字符已处理。
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if(b){//单位{'十','百','千','万','亿'}
|
|
|
// 如果当前字符不是数字,那么它应该是一个单位。
|
|
|
for (int j = 0; j < chArr.length; j++) {
|
|
|
// 遍历单位数组,检查当前字符是否为单位。
|
|
|
if (c == chArr[j]) {
|
|
|
// 根据单位字符,更新temp的值。
|
|
|
switch (j) {
|
|
|
case 0:
|
|
|
temp *= 10;
|
|
|
break;
|
|
|
case 1:
|
|
|
temp *= 100;
|
|
|
break;
|
|
|
case 2:
|
|
|
temp *= 1000;
|
|
|
break;
|
|
|
case 3:
|
|
|
temp *= 10000;
|
|
|
break;
|
|
|
case 4:
|
|
|
temp *= 100000000;
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
count++;
|
|
|
// 每遇到一个单位字符,计数器增加。
|
|
|
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
if (i == chineseNumber.length() - 1) {
|
|
|
//遍历到最后一个字符
|
|
|
// 如果已经遍历到字符串的最后一个字符。
|
|
|
|
|
|
result += temp;
|
|
|
// 将最后一个单位的值累加到结果中。
|
|
|
}
|
|
|
}
|
|
|
return result;
|
|
|
|
|
|
// 返回转换后的阿拉伯数字。
|
|
|
}
|
|
|
} |