数字转汉字

本博客介绍了一个Java程序,用于通过命令行输入数字并将其转换为中文大写形式,同时验证输入是否全部为数字。程序实现了一个简单的字符到数字的映射,并根据输入的数字长度和内容进行相应的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
		}
	}
}

错误处,请指出,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值