中文数字加减

132 阅读1分钟

请实现计算汉字中的数字的加减,只能实现三位数以内的,如随机输入一百二十五加五十,结果为一百七十五。

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


public class Test05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个汉字数字:");
        String str = sc.nextLine();
        int index = str.indexOf('加');
        String str1 = str.substring(0, index);
        String str2 = str.substring(index + 1, str.length());//划分为两个小字符串
        int res1 = change(str1);
        int res2 = change(str2);
        int res = res1 + res2;
        String string = Integer.toString(res);
        String s = rechange(string);
        System.out.println(s);
    }

    public static int change(String s) {
        Map<Character, Integer> number_Map = new HashMap<Character, Integer>() {
            {
                put('零', 0);
                put('一', 1);
                put('二', 2);
                put('三', 3);
                put('四', 4);
                put('五', 5);
                put('六', 6);
                put('七', 7);
                put('八', 8);
                put('九', 9);
            }
        };
        Map<Character, Integer> unit_Map = new HashMap<Character, Integer>() {
            {
                put('十', 10);
                put('百', 100);
            }
        };
        int res = 0;
        int unit = 1;
        int num = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            Character c = s.charAt(i);
            if (number_Map.containsKey(c)) {
                num = number_Map.get(c);
                res += num * unit;
            } else
                unit = unit_Map.get(c);
        }
        return res;
    }

    public static String rechange(String str) {
        char[] numChar = str.toCharArray();
        String[] chinese = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
        String[] unit = {"十", "百", "千"};
        StringBuffer sb = new StringBuffer();
        //获取用户输入的字符串长度
        int size = numChar.length;
        //遍历char数组
        for (int i = 0; i < numChar.length; i++) {
            //将用户输入的数字拿出来
            //比如用户输入1234数字
            //numChar['1','2','3','4']
            //numChar[0]
            //因此拿到的阿拉伯数字就是num=1
            int num = Integer.parseInt(String.valueOf(numChar[i]));

            if (i != numChar.length - 1 && numChar[i] == '0' && numChar[i + 1] != '0') {
                sb.append(chinese[num]);
            } else if (i != numChar.length - 1&&numChar[i] != '0'  ) {
                sb.append(chinese[num] + unit[size - 2 - i]);
            } else if (i == numChar.length - 1 && numChar[i] != '0') {
                sb.append(chinese[num]);
            } else if (i == numChar.length - 1 && numChar[i] == '0') {
                continue;
            }
        }
        return sb.toString();
    }
}