package test;
import java.util.ArrayList;
import java.util.Scanner;
/**
* 通过命令行输入一串字符,首先判断这些字符是否是数字。如果其中有字符不是 数字,
* 那么直接在命令行上输出“用户输入的字符不都为数字,无法转换”,程序结束;如果
* 用户输入的字符都为数字,那么将该数字转换为中文的大写表示 (用户每次最多输入
* 8个字符)。
**/
public class NumberChar {
private static final String[][] CHINESE = {
{ "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" },
{ "", "十", "百", "千", "万", "十", "百", "千" } };
public ArrayList<String> numberToChar(String input) {
ArrayList<String> output = new ArrayList<String>();
// 是数字
if (input.matches("^\\d{0,8}$")) {
int number = Integer.parseInt(input);
// 如果是0
if (number == 0) {
System.out.println("零");
System.exit(0);
}
// 非零
String[] numbers = String.valueOf(number).split("");
int size = numbers.length;
for (int i = 0; i < size; i++) {// 遍历每一个数字
for (int j = 0; j < CHINESE[0].length; j++) {
if (numbers[i].equals(j + "")) {// 数字与对应汉字映射
boolean tag = true;
if (numbers[i].equals("0")) {// 如果该数字为0且后面全是0,则不输出
tag = false;// 如果为0,默认不输出
for (int k = i + 1; k < size; k++) {
if (!numbers[k].equals("0")) {
tag = true;// 0后面有数字不为0,则输出
break;
}
}
}
if (tag) {
output.add(CHINESE[0][j]);// 存储每一位
if (!numbers[i].equals("0")) {// 如果数字为0则不输出
output.add(CHINESE[1][size - i - 1]);// 存储每一位的权重
}
}
break;
}
}
}
return output;
}
// 不是数字
System.out.println("用户输入的字符不都为数字,无法转换");
return output;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
String in = input.nextLine();
ArrayList<String> output = new NumberChar().numberToChar(in);
for (String s : output) {
System.out.print(s);
}
}
}
错误处,请指出,谢谢!