博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将阿拉伯数字转为中文大写读法
阅读量:7099 次
发布时间:2019-06-28

本文共 3784 字,大约阅读时间需要 12 分钟。

/** * 问题描述: * 		将一个键盘输入的数字转化成中文输出,使用异常捕获输入的非法字符。 *      (例如:输入:1234567     输出:一百二拾三万四千五百六拾七) *       * @author 常维军 * 		      创建时间:2012-8-8 *  * 思想: * 对于一串数字一般读法是固定的 * 			口亿口千口百口拾口万口千口百口拾口 * 		1,从控制台读入一串数字 * 		2,对数字转换为字符串           		1234567                    ------->  "1234567" * 		3,将字符串逆序                      		"1234567"                  -------> "7654321" * 		4,格式化                                			"7654321"                  -------> "一拾二百三千四万五拾六百七" * 		5,对上述字符串进行逆序后返回     	"一拾二百三千四万五拾六百七" -------> "七百六拾五万四千三百二拾一" * 		5,对含零值进行单独处理:   * 							情况如下:5000 ----->  直接返回   "五千"      * 									 5001 ----->   返回      "五千零一" * 								     *  */import java.util.Scanner;public class TestExchange {	public static void main(String[] args) {		// 接收控制台输入的数字		System.out.println(numberProcess(getInt()));	}	/**	 * 安全的接受一个整数	 * 	 * @return 一个整数	 */	public static int getInt() {		System.out.println("请输入一个整数,按Enter键结束:");		int input = 0;		Scanner sc = new Scanner(System.in);		try {			input = sc.nextInt();		} catch (Exception e) {			input = getInt();		}		return input;	}	public static String numberProcess(int number) {		String inputProcess = String.valueOf(number);		StringBuilder input = new StringBuilder(inputProcess);		input.reverse();		StringBuilder outTemp = new StringBuilder();		char c;		for (int i = 0; i < input.length(); i++) {			c = input.charAt(i);			switch (i + 1) {			case 1:				outTemp.append(dealWithChar(c));				break;			case 2:				outTemp.append('拾');				outTemp.append(dealWithChar(c));				break;			case 3:				outTemp.append('百');				outTemp.append(dealWithChar(c));				break;			case 4:				outTemp.append('千');				outTemp.append(dealWithChar(c));				break;			case 5:				outTemp.append('万');				outTemp.append(dealWithChar(c));				break;			case 6:				outTemp.append('拾');				outTemp.append(dealWithChar(c));				break;			case 7:				outTemp.append('百');				outTemp.append(dealWithChar(c));				break;			case 8:				outTemp.append('千');				outTemp.append(dealWithChar(c));				break;			case 9:				outTemp.append('亿');				outTemp.append(dealWithChar(c));				break;			case 10:				outTemp.append('拾');				outTemp.append(dealWithChar(c));				break;			}		}		outTemp = outTemp.reverse();		StringBuilder output = new StringBuilder();		for (int i = 0; i < outTemp.length() - 1; i++) {			int j = i;			char ch = outTemp.charAt(i);			int len = outTemp.length() - i;			// 对万位情况进行处理, 如不处理,1000000,只会返回一百,同时应该保证千万位,百万位为零会多出万字的情况			if (len >= 9 && len <= 15) {				if (ch == '零' && len == 9) {					output.append("万");				}			}			// 同上,对亿位进行处理			if (len > 15) {				if (ch == '零' && len == 15) {					output.append("亿");				}			}			/**			 * 五万零千零百零拾一 创建输出处理临时空间			 * i指针,从左向右扫描(字符的最后一位不扫描,单独处理),若不是'零',将该字符值添加到临时空间中 遇到'零'			 * 暂停,j指针,开始从i暂停位置开始扫描(字符的最后一位不扫描,单独处理)			 * 若遇到'零'继续向后扫描,没有遇到'零'结束。向临时空间中添加一个'零',i从j的位置开始继续扫描。			 * 			 * 对最后一位的处理: 			 * 若最后一位为零:去除临时空间中的最后一个字符,即:'零'			 * 若最后一位不是零:将最后一位字符添加到临时空间			 */			if (ch != '零') {				output.append(ch);			} else {				char chs = outTemp.charAt(j);				while (chs == '零' && j < outTemp.length() - 1) {					j = j + 2;					chs = outTemp.charAt(j);				}				output.append('零');				i = j - 1;			}		}		// 对最后一位进行处理		char cha = outTemp.charAt(outTemp.length() - 1);		if (cha != '零') {			output.append(cha);		} else {			output.deleteCharAt(output.length() - 1);		}		return output.toString();	}	/**	 * 将数字转为大写 作用: 单纯的字符转换	 * 	 * @param c	 *            数字的字符	 */	public static char dealWithChar(char c) {		switch (c) {		case '0':			return '零';		case '1':			return '一';		case '2':			return '二';		case '3':			return '三';		case '4':			return '四';		case '5':			return '五';		case '6':			return '六';		case '7':			return '七';		case '8':			return '八';		case '9':			return '九';		}		return ' ';	}}

转载于:https://www.cnblogs.com/wjchang/archive/2012/08/09/3671585.html

你可能感兴趣的文章
异常不可用于逻辑处理
查看>>
小米手机如期而至
查看>>
STM32 RCC实验 MCO脚输出时钟波形
查看>>
Flash 最小化,帧速变慢的问题
查看>>
java对redis的基本操作(一)
查看>>
基因组印记
查看>>
34个漂亮的应用程序后台管理界面(系列三)
查看>>
double free or corruption (!prev): 0x080644c8 ***
查看>>
在VMware上搭建iPhone开发环境(转)
查看>>
MongoCola使用教程 1 - MongoDB的基本操作和聚合功能
查看>>
2012年3月份30个优秀的jquery插件集合 功能强大
查看>>
公共的Json操作C#类
查看>>
WebService如何调试及测试工具
查看>>
HDU-2091 水题
查看>>
【转】条件编译#ifdef的妙用详解_透彻
查看>>
jQuery.autocomplete 支持中文输入
查看>>
配置ubuntu的mac主题
查看>>
makefile文件的两种常用书写格式(搜索路径式+递归式)
查看>>
Android4.0蓝牙使能的详细解析
查看>>
Freemarker常用技巧(三)
查看>>