600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 将阿拉伯数字转为中文大写读法

将阿拉伯数字转为中文大写读法

时间:2020-05-05 14:45:53

相关推荐

将阿拉伯数字转为中文大写读法

/*** 问题描述:* 将一个键盘输入的数字转化成中文输出,使用异常捕获输入的非法字符。*(例如:输入:1234567输出:一百二拾三万四千五百六拾七)** @author 常维军* 创建时间:-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 ' ';}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。