通过命令行输入一串字符,首先判断这些字符是否都为数 字。如果其中有字符不是数字,那么直接在命令行上输出“用 户输入的字符不都为数字,无法转换”,程序结束;如果用 户输入的字符都为数字,那么将该数字转换为中文的大写表 示 (用户每次最多输入8 个字符)。 输入输出示例: 输入:1234567 输出:一百二十三万四千五百六十七 输入:0001 输出:一 输入:1001 输出:一千零一 输入:1100 输出:一千一百
输入:10100 输出:一万零一百 输入:0010 输出:十 输入:00000001 输出:一 输入:10000001 输出:一千万零一 输入:10000010 输出:一千万零十 输入:10000100 输出:一千万零一百 输入:11000000 输出:一千一百万
输入:10100000 输出:一千零十万 输入:10010000 输出:一千零一万 输入:10001000 输出:一千万零一千 输入:a00045 输出:用户输入的字符不都为数字,无法转换 输入:a 输出:用户输入的字符不都为数字,无法转换
package com.javaTest11; import javax.swing.JOptionPane; public class ConvertChinese { public static void main(String[] args) { String str = " "; while (!str.equals("")) { str = JOptionPane.showInputDialog("请输入小于或等于8位的数字进行转换,直接确认为退出."); try { Integer.parseInt(str); } catch (NumberFormatException e) { System.out.println("用户刷入的不都为数字,无法转换."); continue; } convert(str); } } public static void convert(String str) { str = str.length() > 8 ? str.substring(0, 8) : str; while(str.startsWith("0")) { str = str.substring(1); } System.out.println("转换前的有效数字是:/t" + str); System.out.println("转换后的结果是:/t" + convertToRightFormat(str)); } private static String convertToRightFormat(String str) { StringBuffer result = new StringBuffer(); int length = str.length(); boolean bZero = false; char[] digits = new char[] { '/u0000', '十', '百', '千', '万', '十', '百', '千' }; char[] chs = new char[] { '零', '一', '二', '三', '四', '五', '六', '七', '八', '九' }; for (int i = 0; i < length; i++) { char ch = chs[Integer.parseInt(str.charAt(i) + "")]; char digit = digits[length - 1 - i]; // 处理零和连续零的情况 if (ch == '零') { bZero = true; if (digit == '万') { result.append('万'); } continue; } if (bZero) { result.append('零'); bZero = false; } // 处理一十的情况 if (digit == '十' && ch == '一') { result.append("十"); continue; } result.append(ch).append(digit); } return result.toString(); } }