A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 官珺伟 高级黑马   /  2014-4-20 12:02  /  1041 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 官珺伟 于 2014-4-20 21:59 编辑

金额转换,阿拉伯数字转换成中国传统形式。 例如:101000001010 转换为 壹仟零壹拾亿零壹仟零壹拾圆整

2 个回复

倒序浏览
刚刚不就有个人分享了这题的代码了吗?自己去看吧http://bbs.itheima.com/thread-114919-1-1.html
回复 使用道具 举报
import java.util.ArrayList;
import java.util.List;

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

                String str=getString(temp);
                System.out.println(str);
               
        }
        public static String getString(String str)
        {
                if(str.indexOf('.')!=-1)
                {
                        String[] temp=str.split("\\.");
                        return get(temp[0])+getReght(temp[1]);
                }
                return get(str)+"整";
        }
//        判断字符串的长度与是否都是纯数字
        private static String get(String str)
        {
                if((str.length()<=LEFT_DANWEI.length)&&(str.matches("\\d+")))
                        return getLeft(str);
                return "格式错误";
        }
        
        public static String getReght(String reght)
        {
                List<String> list=null;
                if(reght.length()>2)
                        list=getList(reght.substring(0, 2), REGHT_DANWEI);
                else list=getList(reght, REGHT_DANWEI);
               
                if(list.size()==4&&list.get(0).equals(NUMBLES[0])&&list.get(list.size()-2).equals(NUMBLES[0]))
                        list.clear();
                if(list.size()==2&&list.get(0).equals(NUMBLES[0]))
                        list.clear();
                if(list.size()==4&&list.get(0).equals(NUMBLES[0]))
                        list.remove(1);
                if(list.size()>=4&&list.get(list.size()-2).equals(NUMBLES[0]))
                {
                        list.remove(list.size()-1);
                        list.remove(list.size()-1);
                }
                if(list.size()!=0)
                        return gettoString(list);
                return "整";
                                
        }
        
        public static List<String> getList(String left,String[] danwei)
        {
                List<String> list=new ArrayList<String>();
                for(int i=0;i<left.length();i++)
                {
                        list.add(NUMBLES[Integer.valueOf(left.charAt(i)+"")]);
                        list.add(danwei[left.length()-1-i]);
                }
                return list;
        }
//        对应查表将字符串数字转换成中文
        public static String getLeft(String left)
        {
                List<String> list=getList(left,LEFT_DANWEI);
        
                //去零操作
                delZore(list,LEFT_DANWEI[4],LEFT_DANWEI[8]);
               
                //对万位与亿单位进行检查
                delmod(list,4,4,LEFT_DANWEI);
                delmod(list,8,LEFT_DANWEI.length-8,LEFT_DANWEI);
               
                //对个位判断,如果失灵               
                if(list.size()>=2&&list.get(list.size()-2).equals(NUMBLES[0]))
                        list.remove(list.size()-2);
               
//                System.out.println("最终结果 \t--"+list);
               
                return gettoString(list);
        }
        
        //对零进行操作
        public static void delZore(List<String> list,String temp1,String temp2)
        {
                //去除连续的零,但保留万位的零与亿位的零
                for(int i=0;i<list.size()-2;)
                {
                        if(list.get(i).equals(NUMBLES[0])&&!list.get(i+1).equals(temp1)&&!list.get(i+1).equals(temp2))
                                if(list.get(i+2).equals(NUMBLES[0]))
                                {
                                        list.remove(i);list.remove(i);
                                        continue;
                                }
                        i++;
                }
               
//                System.out.println("去连零结果 \t--"+list);
               
                //去除多余的零单位               
                for(int i=0;i<list.size()-2;i++)
                        if(list.get(i).equals(NUMBLES[0]))
                        {
                                if(list.get(i+1).equals(temp1)||list.get(i+1).equals(temp2))
                                        list.remove(i);
                                else list.remove(i+1);
                        }
               
//                System.out.println("去零单位结果\t--"+list);
        }
        
        //去除多余单位
        public static void delmod(List<String> list,int index,int connt,String[] danwei)
        {
               
                for(int i=index;i<(connt+index);i++)
                        if(list.contains(danwei[i]))
                                for(int j=index+1;j<(connt+index);j++)
                                        if(list.contains(danwei[j]))
                                                list.set(list.indexOf(danwei[j]), danwei[j].substring(0, danwei[j].length()-1));

//                System.out.println("去单位结果\t--"+list);
        }
        
        //将集合类的元素组合成字符串
        public static String gettoString(List<String> list)
        {
                StringBuilder sb=new StringBuilder();
                for(String i:list)
                        sb.append(i);
                return sb.toString();
        }
        
        
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马