阿拉伯数字转汉字
最近面试字节的时候,遇到了这道题目,当时没做出来,面试完找了好多博客,感觉都不太正确。
于是我自己动手实现了一个
import java.util.Scanner;
public class AlaboToChina {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
while (scanner.hasNext()) {
String str = scanner.next();
//定义转换后的汉语数字
String[] nums = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
//定义单位
String[] units = {"十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
String res = "";
int len = str.length();
int pre = -1;
for (int i = 0; i < len; i++) {
int num = str.charAt(i) - '0';
if (num != 0) { // 若当前num不是0,即记录到res中
if (pre == 0) res += nums[0]; // 如果该字符之前的字符是0,那么先拼接前面的零
res += nums[num]; // 若当前num不是0,即记录到res中
}
// 拼完数字后,拼接单位
// 1.首先i是最后一个元素,即个位的时候不用拼符号,所以i!=len-1
// 2.1 其次num不为0不用说肯定拼接
// 2.2 当前i在万的前面或者亿的前面一位即(len-i)%4==1的时候也得拼接,举例101234,i=1时候的时候尽管num=0,但是这个万还是得要
if (i != len - 1 && ((len - i) % 4 == 1 || num != 0)) {
res += units[len - 2 - i]; // 拼接的话直接用len-2-i就能获得对应的单位位置
}
pre = num;
}
// 最后处理下,如果是10000这种结果会是一十万,这种可以省略前的一,截成十万
if (res.length() > 1 && res.charAt(0) == '一' && res.charAt(1) == '十') {
res = res.substring(1);
}
System.out.println("转换结果为:" + res);
}
}
}
我自己尝试了一些测试用例,好像没啥问题。