中文的数字转为阿拉伯数字

import java.util.HashMap;
import java.util.Map;

public class ChineseToNumber {

    // 定义中文数字和阿拉伯数字的映射
    private static final Map<Character, Integer> chineseNumMap = new HashMap<>();
    private static final Map<Character, Integer> chineseUnitMap = new HashMap<>();

    static {
        chineseNumMap.put('零', 0);
        chineseNumMap.put('一', 1);
        chineseNumMap.put('二', 2);
        chineseNumMap.put('三', 3);
        chineseNumMap.put('四', 4);
        chineseNumMap.put('五', 5);
        chineseNumMap.put('六', 6);
        chineseNumMap.put('七', 7);
        chineseNumMap.put('八', 8);
        chineseNumMap.put('九', 9);

        // 单位:十、百、千
        chineseUnitMap.put('十', 10);
        chineseUnitMap.put('百', 100);
        chineseUnitMap.put('千', 1000);
    }

    public static int chineseToNumber(String chinese) {
        int result = 0;   // 最终结果
        int temp = 0;     // 当前单位值的计算
        int unit = 1;     // 单位,默认是个位

        for (int i = chinese.length() - 1; i >= 0; i--) {
            char c = chinese.charAt(i);

            // 如果是单位字符(如“十”、“百”、“千”)
            if (chineseUnitMap.containsKey(c)) {
                unit = chineseUnitMap.get(c);  // 更新单位
                // 处理“十”、“百”开头的情况(如“十一”表示11)
                if (i == 0) {
                    temp = 1;
                }
            } else if (chineseNumMap.containsKey(c)) {
                int num = chineseNumMap.get(c);  // 获取对应的数字
                temp += num * unit;  // 乘以当前单位
                unit = 1;  // 每次处理完一个数字,复位单位为个位
            }
        }
        
        result += temp;  // 加入最后的累积值
        return result;
    }

    public static void main(String[] args) {
        String chinese1 = "七十七";
        String chinese2 = "八十九";
        String chinese3 = "一百一十";
        String chinese4 = "二百零五";
        String chinese5 = "三千四百五十六";

        System.out.println(chinese1 + " 转换为数字: " + chineseToNumber(chinese1));  // 输出 77
        System.out.println(chinese2 + " 转换为数字: " + chineseToNumber(chinese2));  // 输出 89
        System.out.println(chinese3 + " 转换为数字: " + chineseToNumber(chinese3));  // 输出 110
        System.out.println(chinese4 + " 转换为数字: " + chineseToNumber(chinese4));  // 输出 205
        System.out.println(chinese5 + " 转换为数字: " + chineseToNumber(chinese5));  // 输出 3456
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手揽回忆怎么睡

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值