杰瑞科技汇

Java如何将中文数字转为阿拉伯数字?

Java 中文数字转阿拉伯数字

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

Java如何将中文数字转为阿拉伯数字?-图1
(图片来源网络,侵删)

使用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) {
        // 实际使用时需要完整实现转换逻辑
    }
}

注意事项

  1. 中文数字有多种表示方式,如"一"和"壹",上述代码主要处理简体中文数字
  2. 需要处理特殊情况,如"一十"通常表示10
  3. 对于大数字(如亿以上),需要确保正确处理单位递进
  4. 上述方法可能无法处理所有中文数字变体,可能需要根据实际需求进行调整

如果你需要处理更复杂的中文数字转换,建议考虑使用专门的数字转换库或扩展上述方法以支持更多变体。

Java如何将中文数字转为阿拉伯数字?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇