package com.sinitek.demo02; import java.util.Scanner; /** * 描述: * 1. 算法—数值转化:将阿拉伯数字转化为汉字,最多能输入12位数字 * 例子: * 101000 一十万一千 * 100001 一十万零一 * 100000000001 一千亿零一 * 200000000000 二千亿 * 102030405060 一千零二十亿三千零四十万五千零六十 * 123456789010 一千二百三十四亿五千六百七十八万九千零一十 * 200001001000 二千亿零一百万一千 * 200010001000 二千亿一千万一千 * 要求: * a.只允许使用8种基本数据类型实现算法主体部分 * b.根据0所在的位置,选择是否需要读出,如200010001000二千亿一千万一千200001001000二千亿零一百万一千 * c.能够在控制台输入和输出 */ public class Demo { private static String[] weight = {" ", "十", "百", "千"}; private static String[] weightB = {"亿", "万"}; private static String[] numberC = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; private static Scanner scan = new Scanner(System.in); public static void main(String[] args) { while (true) { System.out.println("输入数字:"); Long number = scan.nextLong(); //数字转为字符串 char[][] chars = numberToChar(number); //解析为汉字字符 String analyze = analyze(chars); System.out.println(analyze); } } // 将数字转换成char的二位数组 public static char[][] numberToChar(Long number) { //每四位进行解析 char[][] chars = new char[3][4]; // 赋初值 for (int i = 0; i < chars.length; i++) { for (int i1 = 0; i1 < chars[i].length; i1++) { chars[i][i1] = '0'; //以0占位 } } // 输入值 String numberStr = number + ""; // 将数字转换成数组 char[] chars1 = numberStr.toCharArray(); // 将值复制到二维数组中,将取出的数字依次进行赋值 int indexI = 2; int indexJ = 3; for (int i = chars1.length - 1; i >= 0; i--) { chars[indexI][indexJ] = chars1[i]; indexJ--; if (indexJ < 0) { indexJ = 3; indexI--; } } return chars; } // 解析 public static String analyze(char[][] chars) { String numberStr = ""; for (int i = 0; i < chars.length; i++) { // 分组解析数组,返回解析后的字符串 String parse = parse(chars[i]); //每四位进行数据拼接 if (countNumber(chars[i]) != 4) { if (i < 2) { numberStr += parse + weightB[i]; } else { numberStr += parse; } } } //去除最前面的零 if (numberStr.indexOf('零') == 0) { numberStr = numberStr.substring(1); } // 去除全部的空格 numberStr = numberStr.replaceAll(" ", ""); return numberStr; } // 分组解析数组 public static String parse(char[] chars) { String str = ""; // 取出数组,并转换成数字 int number = Integer.parseInt(new String(chars)); // 解析number // 将number的值解析成汉字 int count = 0; while (number != 0) { int weight_number = number % 10; //判断最后一位是否为0 number = number / 10; if (weight_number != 0) { //拼接数字,单位,并转成字符串 str = numberC[weight_number] + weight[count++] + str; } else { //结果为0则就不用拼接单位 str = numberC[weight_number] + str; count++; } } // 清除后面的零 str = str.substring(0, str.length() - ling(str)); //消除中间重复的零 str = str.replaceAll("零零", "零"); // 是否前面添加零 if (chars[0] == '0') { str = "零" + str; } return str; } // 统计零的个数 public static int countNumber(char[] chars) { int count = 0; for (char aChar : chars) { if (aChar == '0') { count++; } } return count; } // 统计后面的零 public static int ling(String string) { int count = 0; for (int length = string.length() - 1; length >= 0; length--) { if (string.charAt(length) == '零') { count++; } else { break; } } return count; } }
将阿拉伯数字转化为汉字,最多能输入12位数字
最新推荐文章于 2021-08-27 21:10:49 发布