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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
* 需求:金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)->(一千零一拾一元整)输出,
*                                                      (¥1011.04)->(一千零一拾一元零肆分)输出。
* 分析:
*    1.  judge(String str)判断输入数字格式是否合法:
*            小数部分:(.\\d{1,2})?       (有.有小数部分,没有.就没有小数部分 )
*            整数部分:(小于一元时,整数位只有一个0)                 ¥[0]              
*                      (大于或等于一元时,整数部分第一位非0)         ¥[1-9]\\d*      
*    2.  delete(String str0,String str1) 删除str0中的str1,用以删除.和¥   
*    3.  toLong()  将字符串统一补成小数后两位,删除.和¥后,将新的字符串装换成Long型   
*    4.  changeToChina(long number) 将输入Long型数值转换成中国传统数字格式     
*/

public class MoneyFormatConversion {
        public static void main(String[] args) {       
                String format1="¥?[0](.\\d{1,2})?";       //小于一元时,输入的格式
                String format2="¥?[1-9]\\d*(.\\d{1,2})?"; //大于一元时,输入的格式
                String moneyString="¥9980553555757511.00";
                Money money=new Money(moneyString);
                if(money.judge(format1)||money.judge(format2)){
                                           System.out.println("输入合法!   输入字符串为:  "+moneyString);
                                           long moneyNumber;
                                try {
                                      moneyNumber = money.toLong();
                                      System.out.println(money.changeToChina(moneyNumber));
                                 } catch (Exception e) {
                                     System.out.println("错误:  输入数字过大!量纲数组角标越界");
                                 }          
               }else{
                                        System.out.println("输入不合法!");
               }       
        }
}

class Money{       
        private String moneyString;
        public Money(String moneyString){
                this.moneyString=moneyString;
        }       
        //判断字符串是否符合某种格式
        public boolean judge(String format){
                Pattern p=Pattern.compile(format);
                Matcher m=p.matcher(this.moneyString);               
                if(m.matches())
                          return true;
            else
                          return false;
        }
       
        //将输入的字符串按照中国传统格式转换
        public String changeToChina(long number){
                char[] num=new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
                char[] units=new char[]{'分','角','元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万','拾','佰','仟'};
                StringBuffer sb=new StringBuffer();       
                int unit=0;
                boolean flag=true;//保证连续出现0时,只输出一个零
                int s=(int)(number%10);//用来标记最小位是否为0,为0则不添加最小位上的0,不为0则按要求添加
                while(number!=0){                       
                        if(number%10!=0){
                                s=1;
                                flag=true;
                                sb.insert(0, units[unit++]);
                                sb.insert(0, num[(int)(number%10)]);//此时需要将number%10整体转型为int,单独转number时,如果数字太大,则会出现溢出的错误               
                        }else{ //无论几个0,只输出一个零
                                if(flag){
                                        if(s!=0&&unit!=2){               
                                                sb.insert(0, num[0]);                       
                                        }                                         
                                }
                                if((unit==2||unit==6||unit==10||unit==14)&&number/10>0){
                                  sb.insert(0, units[unit]);
                                }
                                flag=false;
                                ++unit;
                        }
                        number=number/10;                       
                }
                return sb.toString();
        }
       
    //  先将字符串统一变换成小数点后有两位数的形式,再删除.和¥,最后将新的字符串转变成相应的Long型
        public long toLong(){       
                String newString0=this.moneyString;
                if(this.moneyString.contains(".")){
                        if((this.moneyString.length()-this.moneyString.indexOf("."))==2){
                                System.out.println("11");
                                newString0=this.moneyString+"0";
                        }
                }else{
                            newString0=this.moneyString+"00";
                }
                System.out.println("补零后的:  "+newString0);
                System.out.println("删除   :  .  ");
                       //删除字符¥和.
                String newString1=deleteString(newString0,".");
                System.out.println("删除   :  ¥");
                String newString2=deleteString(newString1,"¥");
                      //将新的字符串转变成数字
                long moneyNumber=Long.valueOf(newString2);               
                System.out.println("转换成整形后:   "+moneyNumber);
                return moneyNumber;               
        }
       
        //删除字符串中指定的字符串
    public  String deleteString(String str0,String str1){
            String newString=str0;
            System.out.println("str0删除之前:  "+str0);
            if(str0.contains(str1)){
                    StringBuffer sb=new StringBuffer(str0);
                    char[] ch0=str0.toCharArray();
                    char ch1=str1.charAt(0);         
                    for(int i=0;i<str0.length()-str1.length();i++){
                            if(ch0[i]==ch1){
                                    sb.delete(i, str1.length()+i);
                                    newString=sb.toString();                                   
                            }                           
                    }
            }
            System.out.println("str0删除之后:  "+newString);
            return newString;          
    }                       
}

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

3 个回复

倒序浏览
沙发:P顶起
回复 使用道具 举报
谢了楼主分享
回复 使用道具 举报
不错,学习啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马