通过命令行输入一串字符,首先判断这些字符是否都为数 字。如果其中有字符不是数字,那么直接在命令行上输出用 户输入的字符不都为数字,无法转换,程序结束;如果用 户输入的字符都为数字,那么将该数字转换为中文的大写表 示 (用户每次最多输入8 个字符)
通过命令行输入一串字符,首先判断这些字符是否都为数
字。如果其中有字符不是数字,那么直接在命令行上输出“用
户输入的字符不都为数字,无法转换”,程序结束;如果用
户输入的字符都为数字,那么将该数字转换为中文的大写表
示 (用户每次最多输入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();
}
}