思路
把阿拉伯数字转成字符串再反转成list 集合,把反转后的数据遍历,遍历时四个为一组,每一组都是小于一万的数字,在四个一组中的第二个添加单位十,第三个添加单位百,第四个添加单位千,以此类推。当数据遍历到第5个时对应单位万,并添加单位万,第9个时对应单位亿,并添加单位亿,第13位时对应单位万亿,并添加单位万,当遇到零时,如果反转后的数组前一个不为0,则添加零,如果为0则进行下一次循环。
代码
private static String numberToChinese(Long number) {
// 基本数字 Map
Map<Integer, Character> numberMap = new HashMap<>();
numberMap.put(0, '零');
numberMap.put(1, '一');
numberMap.put(2, '二');
numberMap.put(3, '三');
numberMap.put(4, '四');
numberMap.put(5, '五');
numberMap.put(6, '六');
numberMap.put(7, '七');
numberMap.put(8, '八');
numberMap.put(9, '九');
String[] unitString = new String[]{"十", "百", "千", "万", "亿"};
// 把Long 类型的数据转成集合并反转
List<String> list = Arrays.asList(String.valueOf(number).split(""));
Collections.reverse(list);
StringBuilder res = new StringBuilder();
for (int i = 0; i < list.size(); i++) {
int x = i % 4;
int y = i / 4;
int integer = Integer.parseInt(list.get(i));
if(x == 0 && y > 0) {
res.insert(0, y % 2 == 1 ? unitString[3] : unitString[4]);
}
if(0 == integer) {
if(i > 0 && ! "0".equals(list.get(i - 1))) {
res.insert(0, numberMap.get(integer));
}
continue;
}
if(x != 0) {
res.insert(0, unitString[x - 1]);
}
res.insert(0, numberMap.get(integer));
}
return res.toString();
}