黑马程序员技术交流社区

标题: 将数字金额转换成中文金额 [打印本页]

作者: Tking    时间: 2014-4-20 11:50
标题: 将数字金额转换成中文金额
本帖最后由 Tking 于 2014-4-20 17:38 编辑

程序的目的:将一串数字金额,转换成汉字金额;目前是能保留两位小

  1. import java.util.ArrayList;
  2. import java.util.List;

  3. public class Test11 {
  4.         static final String[] REGHT_DANWEI={"分","角"};
  5.         static final String[] LEFT_DANWEI={"元","拾","佰","仟","万","拾万","佰万","仟万","亿","拾亿","佰亿","万亿","拾万亿","佰万亿","仟万亿"};
  6.         static final String[] NUMBLES={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
  7.         public static void main(String[] args)
  8.         {
  9.                
  10.                 //先判断数字是否可以转换
  11.                 String temp="00001.254";

  12.                 String str=getString(temp);
  13.                 System.out.println(str);
  14.                
  15.         }
  16.         public static String getString(String str)
  17.         {
  18.                 if(str.indexOf('.')!=-1)
  19.                 {
  20.                         String[] temp=str.split("\\.");
  21.                         return get(temp[0])+getReght(temp[1]);
  22.                 }
  23.                 return get(str)+"整";
  24.         }
  25. //        判断字符串的长度与是否都是纯数字
  26.         private static String get(String str)
  27.         {
  28.                 if((str.length()<=LEFT_DANWEI.length)&&(str.matches("\\d+")))
  29.                         return getLeft(str);
  30.                 return "格式错误";
  31.         }
  32.        
  33.         public static String getReght(String reght)
  34.         {
  35.                 List<String> list=null;
  36.                 if(reght.length()>2)
  37.                         list=getList(reght.substring(0, 2), REGHT_DANWEI);
  38.                 else list=getList(reght, REGHT_DANWEI);
  39.                
  40.                 if(list.size()==4&&list.get(0).equals(NUMBLES[0])&&list.get(list.size()-2).equals(NUMBLES[0]))
  41.                         list.clear();
  42.                 if(list.size()==2&&list.get(0).equals(NUMBLES[0]))
  43.                         list.clear();
  44.                 if(list.size()==4&&list.get(0).equals(NUMBLES[0]))
  45.                         list.remove(1);
  46.                 if(list.size()>=4&&list.get(list.size()-2).equals(NUMBLES[0]))
  47.                 {
  48.                         list.remove(list.size()-1);
  49.                         list.remove(list.size()-1);
  50.                 }
  51.                 if(list.size()!=0)
  52.                         return gettoString(list);
  53.                 return "整";
  54.                                
  55.         }
  56.        
  57.         public static List<String> getList(String left,String[] danwei)
  58.         {
  59.                 List<String> list=new ArrayList<String>();
  60.                 for(int i=0;i<left.length();i++)
  61.                 {
  62.                         list.add(NUMBLES[Integer.valueOf(left.charAt(i)+"")]);
  63.                         list.add(danwei[left.length()-1-i]);
  64.                 }
  65.                 return list;
  66.         }
  67. //        对应查表将字符串数字转换成中文
  68.         public static String getLeft(String left)
  69.         {
  70.                 List<String> list=getList(left,LEFT_DANWEI);
  71.        
  72.                 //去零操作
  73.                 delZore(list,LEFT_DANWEI[4],LEFT_DANWEI[8]);
  74.                
  75.                 //对万位与亿单位进行检查
  76.                 delmod(list,4,4,LEFT_DANWEI);
  77.                 delmod(list,8,LEFT_DANWEI.length-8,LEFT_DANWEI);
  78.                
  79.                 //对个位判断,如果失灵               
  80.                 if(list.size()>=2&&list.get(list.size()-2).equals(NUMBLES[0]))
  81.                         list.remove(list.size()-2);
  82.                
  83. //                System.out.println("最终结果 \t--"+list);
  84.                
  85.                 return gettoString(list);
  86.         }
  87.        
  88.         //对零进行操作
  89.         public static void delZore(List<String> list,String temp1,String temp2)
  90.         {
  91.                 //去除开头位置多余零
  92.                 for(int i=0;list.get(i).equals(NUMBLES[0]);)
  93.                 {
  94.                         list.remove(i);list.remove(i);
  95.                 }
  96.                
  97.                 //去除连续的零,但保留万位的零与亿位的零
  98.                 for(int i=0;i<list.size()-2;)
  99.                 {
  100.                         if(list.get(i).equals(NUMBLES[0])&&!list.get(i+1).equals(temp1)&&!list.get(i+1).equals(temp2))
  101.                                 if(list.get(i+2).equals(NUMBLES[0]))
  102.                                 {
  103.                                         list.remove(i);list.remove(i);
  104.                                         continue;
  105.                                 }
  106.                         i++;
  107.                 }
  108.                
  109. //                System.out.println("去连零结果 \t--"+list);
  110.                
  111.                 //去除多余的零单位               
  112.                 for(int i=0;i<list.size()-2;i++)
  113.                         if(list.get(i).equals(NUMBLES[0]))
  114.                         {
  115.                                 if(list.get(i+1).equals(temp1)||list.get(i+1).equals(temp2))
  116.                                         list.remove(i);
  117.                                 else list.remove(i+1);
  118.                         }
  119.                
  120. //                System.out.println("去零单位结果\t--"+list);
  121.         }
  122.        
  123.         //去除多余单位
  124.         public static void delmod(List<String> list,int index,int connt,String[] danwei)
  125.         {
  126.                
  127.                 for(int i=index;i<(connt+index);i++)
  128.                         if(list.contains(danwei[i]))
  129.                                 for(int j=index+1;j<(connt+index);j++)
  130.                                         if(list.contains(danwei[j]))
  131.                                                 list.set(list.indexOf(danwei[j]), danwei[j].substring(0, danwei[j].length()-1));

  132. //                System.out.println("去单位结果\t--"+list);
  133.         }
  134.        
  135.         //将集合类的元素组合成字符串
  136.         public static String gettoString(List<String> list)
  137.         {
  138.                 StringBuilder sb=new StringBuilder();
  139.                 for(String i:list)
  140.                         sb.append(i);
  141.                 return sb.toString();
  142.         }
  143.        
  144.        
  145. }
复制代码



作者: 许庭洲    时间: 2014-4-24 22:07
值得学习ing!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2