Java 中文数字转阿拉伯数字
在Java中,将中文数字转换为阿拉伯数字可以通过多种方式实现,以下是几种常见的方法:

使用Map和循环处理
import java.util.HashMap;
import java.util.Map;
public class ChineseNumberConverter {
private static final Map<Character, Integer> digitMap = new HashMap<>();
private static final Map<Character, Integer> unitMap = new HashMap<>();
static {
// 数字映射
digitMap.put('零', 0);
digitMap.put('一', 1);
digitMap.put('二', 2);
digitMap.put('三', 3);
digitMap.put('四', 4);
digitMap.put('五', 5);
digitMap.put('六', 6);
digitMap.put('七', 7);
digitMap.put('八', 8);
digitMap.put('九', 9);
// 单位映射
unitMap.put('十', 10);
unitMap.put('百', 100);
unitMap.put('千', 1000);
unitMap.put('万', 10000);
unitMap.put('亿', 100000000);
}
public static int chineseToNumber(String chineseNumber) {
int result = 0;
int temp = 0;
int section = 0;
for (int i = 0; i < chineseNumber.length(); i++) {
char c = chineseNumber.charAt(i);
if (digitMap.containsKey(c)) {
temp = digitMap.get(c);
} else if (unitMap.containsKey(c)) {
int unit = unitMap.get(c);
if (unit == 10000 || unit == 100000000) {
section = (section + temp) * unit;
result += section;
section = 0;
temp = 0;
} else {
temp = (temp == 0 ? 1 : temp) * unit;
section += temp;
temp = 0;
}
}
}
return result + section + temp;
}
public static void main(String[] args) {
System.out.println(chineseToNumber("一百二十三")); // 123
System.out.println(chineseToNumber("一千零五")); // 1005
System.out.println(chineseToNumber("三万四千五百六十七")); // 34567
System.out.println(chineseToNumber("一亿零二十万零三百")); // 100020300
}
}
使用正则表达式和替换
import java.util.regex.*;
public class ChineseNumberConverter {
private static final Pattern CHINESE_NUM_PATTERN = Pattern.compile(
"[零一二三四五六七八九十百千万亿]+");
public static int chineseToNumber(String chineseNumber) {
// 处理"一十"开头的特殊情况
if (chineseNumber.startsWith("一十")) {
chineseNumber = chineseNumber.substring(1);
}
// 替换零
String number = chineseNumber.replace("零", "");
// 处理单位
number = number.replace("十", "10");
number = number.replace("百", "100");
number = number.replace("千", "1000");
number = number.replace("万", "10000");
number = number.replace("亿", "100000000");
// 计算结果
String[] parts = number.split("(?<=\\d)(?=\\D)|(?<=\\D)(?=\\d)");
int result = 0;
int temp = 0;
for (String part : parts) {
if (part.matches("\\d+")) {
temp = Integer.parseInt(part);
} else {
temp *= Integer.parseInt(part.replace("^1", ""));
}
result += temp;
temp = 0;
}
return result;
}
public static void main(String[] args) {
System.out.println(chineseToNumber("一百二十三")); // 123
System.out.println(chineseToNumber("一千零五")); // 1005
System.out.println(chineseToNumber("三万四千五百六十七")); // 34567
System.out.println(chineseToNumber("一亿零二十万零三百")); // 100020300
}
}
使用第三方库
如果你不想自己实现,可以使用第三方库如Apache Commons Lang:
import org.apache.commons.lang3.math.NumberUtils;
public class ChineseNumberConverter {
public static int chineseToNumber(String chineseNumber) {
// 这里需要自定义转换逻辑或使用其他专门库
// 以下是示例,实际需要完整实现
return NumberUtils.toInt(chineseNumber, 0);
}
public static void main(String[] args) {
// 实际使用时需要完整实现转换逻辑
}
}
注意事项
- 中文数字有多种表示方式,如"一"和"壹",上述代码主要处理简体中文数字
- 需要处理特殊情况,如"一十"通常表示10
- 对于大数字(如亿以上),需要确保正确处理单位递进
- 上述方法可能无法处理所有中文数字变体,可能需要根据实际需求进行调整
如果你需要处理更复杂的中文数字转换,建议考虑使用专门的数字转换库或扩展上述方法以支持更多变体。

