支持以下中文数字的解析:“点 廿卅 零一二三四五六七八九 十百千万亿”。
测试代码:
public static void main(String[] args) {
// 测试代码
testParseChineseNumber("一二三四五", 12345);
testParseChineseNumber("二零一二", 2012);
testParseChineseNumber("一亿二千万零三万四千五百六十七", 120034567);
testParseChineseNumber("一百二十万三千零四十亿五千万零六十万七千八百九十", 120304050607890L);
testParseChineseNumber("一万万", 100000000);
testParseChineseNumber("一三五七九点二四六八零", 13579.24680);
testParseChineseNumber("一万千", Double.NaN);
testParseChineseNumber("二二十", Double.NaN);
testParseChineseNumber("二十三十", Double.NaN);
}
全部程序:
public class ParseChineseNumber {
private static final String nums = "零一二三四五六七八九";
private static final String units = "十百千万亿";
private static final int[] unitsScales = {
10, 100, 1000, 10000, 100000000};
private static long parseChineseNumberWithoutUnit(String str) {
long result = 0L;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
int num = nums.indexOf(ch);
assert num >= 0