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);