请实现计算汉字中的数字的加减,只能实现三位数以内的,如随机输入一百二十五加五十,结果为一百七十五。
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();
}
}