Java 汉语数字转为阿拉伯数字
在日常生活中,我们经常会遇到将汉语数字转换为阿拉伯数字的需求。例如,我们可能需要将一个表示金额的字符串转换为数字进行计算或比较。在Java中,我们可以使用一些方法来实现这个转换。
方法一:使用数字映射
首先,我们可以创建一个数字映射表,将汉语数字与对应的阿拉伯数字进行对应。例如:
汉语数字 | 阿拉伯数字 |
---|---|
零 | |
一 | 1 |
二 | 2 |
三 | 3 |
四 | 4 |
五 | 5 |
六 | 6 |
七 | 7 |
八 | 8 |
九 | 9 |
十 | 10 |
百 | 100 |
千 | 1000 |
万 | 10000 |
亿 | 100000000 |
然后,我们可以遍历汉语数字的字符串,根据映射表将每个字符转换为对应的阿拉伯数字,并进行累加。
下面是一个示例代码:
import java.util.HashMap;
import java.util.Map;
public class ChineseNumberConverter {
private static final Map<Character, Integer> NUMBER_MAP = new HashMap<>();
static {
NUMBER_MAP.put('零', 0);
NUMBER_MAP.put('一', 1);
NUMBER_MAP.put('二', 2);
NUMBER_MAP.put('三', 3);
NUMBER_MAP.put('四', 4);
NUMBER_MAP.put('五', 5);
NUMBER_MAP.put('六', 6);
NUMBER_MAP.put('七', 7);
NUMBER_MAP.put('八', 8);
NUMBER_MAP.put('九', 9);
NUMBER_MAP.put('十', 10);
NUMBER_MAP.put('百', 100);
NUMBER_MAP.put('千', 1000);
NUMBER_MAP.put('万', 10000);
NUMBER_MAP.put('亿', 100000000);
}
public static int convert(String chineseNumber) {
int result = 0;
int temp = 0;
int multiply = 1;
for (int i = chineseNumber.length() - 1; i >= 0; i--) {
char c = chineseNumber.charAt(i);
if (NUMBER_MAP.containsKey(c)) {
int digit = NUMBER_MAP.get(c);
if (digit >= 10) {
if (digit > multiply) {
multiply = digit;
if (i == 0) {
result += temp * multiply;
temp = 0;
multiply = 1;
}
} else {
multiply *= digit;
}
} else {
temp += digit * multiply;
}
} else {
throw new IllegalArgumentException("Invalid Chinese number: " + chineseNumber);
}
}
result += temp;
return result;
}
}
使用这个示例代码,我们可以将汉语数字字符串转换为对应的阿拉伯数字。例如:
String chineseNumber = "一百二十三";
int arabicNumber = ChineseNumberConverter.convert(chineseNumber);
System.out.println(arabicNumber); // 输出 123
方法二:使用正则表达式
另一种方法是使用正则表达式来匹配汉语数字,并通过替换的方式将其转换为阿拉伯数字。
以下是一个示例代码:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ChineseNumberConverter {
private static final Pattern PATTERN = Pattern.compile("([一二三四五六七八九十百千万亿]+)");
private static final Map<Character, Integer> NUMBER_MAP = new HashMap<>();
static {
NUMBER_MAP.put('零', 0);
NUMBER_MAP.put('一', 1);
NUMBER_MAP.put('二', 2);
NUMBER_MAP.put('三', 3);
NUMBER_MAP.put('四', 4);
NUMBER_MAP.put('五', 5);
NUMBER_MAP.put('六', 6);
NUMBER_MAP.put('七', 7);
NUMBER_MAP.put('八', 8);
NUMBER_MAP.put('九', 9);
NUMBER_MAP.put('十', 10);
NUMBER_MAP.put('百', 100);
NUMBER_MAP.put('千', 1000);
NUMBER_MAP.put('万', 10000);