思路:
创建0至9的汉字数组和单位数组,方便下面取出对应汉字及单位
先转成数组,从左到右转汉字,取对应的单位。
遇到 0 和 单位级别切换时,需要注意单位完整性
代码:
public static String numberToChinese(long number) {
final String[] chineseNum = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
final String[] unit = {"", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百", "千"};
final String[] unit_type = {"", "万", "亿"};
// 转数组
char[] numberArray = (number + "").toCharArray();
// 拼接成字符串
StringBuilder dst = new StringBuilder("");
// 循环 上次数字是否是 0
boolean zero = false;
// 单位级别
int type = numberArray.length / 4;
if (numberArray.length % 4 == 0) {
// 刚好是级别切换
type--;
}
for (int i = 0; i < numberArray.length; i++) {
int num = (int) numberArray[i] - 48;
// 判断是否到了级别切换
if (i > 0 && (numberArray.length - i) % 4 == 0) {
//级别切换时,上次为 0,补齐单位名称
if (zero) {
dst.append(unit_type[type]);
}
type--;
}
// 数字为0跳过
if (num == 0) {
zero = true;
continue;
}
// 上次为0 且不是级别切换时,添加一个零,
if (zero) {
dst.append(chineseNum[0]);
}
// 数字
dst.append(chineseNum[num]);
// 单位
if (i < numberArray.length - 1) {
dst.append(unit[numberArray.length - i - 1]);
}
// 上次数字,设置为非 0
zero = false;
}
return dst.toString();
}