- package com.it.heima;
- /*10、 金额转换,阿拉伯数字转换成中国传统形式。
- 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整
- 思路分析:输入的字符串如果不非法,那么各个数字对应的有个、十、百、千、万等的单位。例如"12345"中1对应的是万位2对应的是千位3对应的是百位
- 4对应的是十位5对应的是各位。我们转译的时候就可以将对应的数字字符和对应的单位字符组合在一起,形成转译后的结果。
- 编程过程:1.将输入的字符转换为字符串
- 2.制作对应的映射字表
- 3.对各种可能出现的情况进行分析(1>输入的不是纯数字字符2>输入的字符首字符为0且字符的长度不为1
- 3>输入的字符中间连续出现0 4>输入的字符结尾为0)
- */
- import java.util.*;
- import java.io.*;
- public class Test10 {
- public static void main(String[] args) throws IOException, NumberFormatException,
- MyException{
- // TODO 自动生成的方法存根
- Map<Integer,String> map=null;
- Map<Character,String> map1=null;
- //单位映射表
- map=new HashMap<Integer,String>();
- String[] str1={"兆","仟亿","佰亿","拾亿","亿","千萬","百萬","拾萬","萬","仟","佰","拾","圆"};
- int i=0;
- for(i=0;i<str1.length;i++){
- map.put(i,str1[str1.length-i-1]);
- }
- //数字映射表
- map1=new HashMap<Character,String>();
- map1.put('0',"零");
- map1.put('1',"壹");
- map1.put('2',"貳");
- map1.put('3',"叁");
- map1.put('4',"肆");
- map1.put('5',"伍");
- map1.put('6',"陸");
- map1.put('7',"柒");
- map1.put('8',"捌");
- map1.put('9',"玖");
- while(true){
- //将输入的数字转换为字符串
- BufferedReader br=new BufferedReader
- (new InputStreamReader(System.in));
- String str=null;
- //String str2=null;
- StringBuilder sb=new StringBuilder();
-
- int len=0;
- try {
- str=br.readLine();
- len=str.length();//获取字符串的长度
- Long.parseLong(str);//判断是否输入的是否为字符串如果是非法字符那么将抛出异常
- if(len!=1&str.charAt(0)=='0'){
- throw new MyException("出现非法数字");//如果输入的字符串例如05、062等以0开头的数字字符那么将报异常
- }
- if(len>13){
- System.out.println("对不起超出映射表范围");
- }
- for(int j=0;j<len;j++){
- if(str.charAt(len-j-1)!='0'){
- sb.insert(0,map.get(j));//添加单位
- sb.insert(0,map1.get(str.charAt(len-1-j)));//添加数字的映射
- }else{
- while(str.charAt(len-j-1)=='0'){//思路:在结果中会出现不规则现象比如说:30030的结果为“叁万零零三十元”
- j++; //这段代码就是为了解决这个问题如果有连续几个0出现那么在查表后只保留一个0
- }sb.insert(0,"零");
- j--; //让j的取值恢复以便进入for循环的j++中
- }}
- if(sb.charAt(sb.length()-1)=='零'){
- sb.deleteCharAt(sb.length()-1);//如果结尾处为'零',那么将零删除
- sb.append('圆');
- }
- System.out.println(sb+"整");
- } catch (IOException e) {
- // TODO 自动生成的 catch 块
- e.printStackTrace();
- }catch(NumberFormatException e){
- System.out.println("输入的不是数字!");
- }catch(MyException e){
- System.out.println("输入的数字非法!");
- }
- }
-
- }}
- class MyException extends Exception{
- MyException(String str){
- super(str);
- }
-
- }
-
-
复制代码 |