将中文小写数字转换为阿拉伯数组
功能是将 一千零八十 转换为 1080 等
代码比较简单就不过多赘述,目前写如算法可以支持百万的识别,如需拓展,可以在regXf[][]中添加对应的单位,再乘以对应的位数
static String numXx[][] = {{"零", "0"}, {"一", "1"}, {"二", "2"}, {"三", "3"}, {"四", "4"}, {"五", "5"}, {"六", "6"}, {"七", "7"}, {"八", "8"}, {"九", "9"}};
static String regXf[][] = {{"零", "零", "+0"}, {".百万", ".(?=百万)", "*1000000"},{".十万", ".(?=十万)", "*100000"},{".万", ".(?=万)", "*10000"}, {".千", ".(?=千)", "*1000"}, {".百", ".(?=百)", "*100"}, {".十", ".(?=十)", "*10"}, {"^十", "", "+10"}, {"^.$", "^.$", "+0"}};
public static String ConvertChinaToNumber(String data) {
System.out.print(data + " : ");
try {
String num = "0";
for (String[] strings : regXf) {
// 正则识别
boolean match = VerifyUtil.matchfind(strings[0], data);
if (match) {
//正则取数
String s = VerifyUtil.matchfindGroup0(strings[1], data);
if (VerifyUtil.isEmpty(s)) s = "0";
String num1 = getNum(s);
num1 = MyMath.test(num1 + strings[2]);
num = MyMath.append(num, num1);
data = data.replaceAll(strings[0], "");
}
}
num = MyMath.test(num, 0);
VerifyUtil.outMsg(num);
return num;
} catch (Exception e) {
e.printStackTrace();
return data;
}
}
public static String getNum(String s) {
for (String[] xx : numXx) {
if (s.equals(xx[0]))
return xx[1];
}
return "0";
}
public static void main(String[] args) {
ConvertChinaToNumber("一");
ConvertChinaToNumber("十一");
ConvertChinaToNumber("二十一");
ConvertChinaToNumber("一百二十一");
ConvertChinaToNumber("一百零一");
ConvertChinaToNumber("一百零八");
ConvertChinaToNumber("一千零八十");
ConvertChinaToNumber("一千零八");
}
该函数中用到了一个比较好用的工具MyMath 建议大家使用