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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 土豆丝 中级黑马   /  2015-11-9 22:27  /  616 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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

2 个回复

倒序浏览
package demo;

import java.util.Scanner;

/**
* 31、 金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010转换为壹仟零壹拾亿 零 壹仟零壹拾 圆整
*
* 涉及知识点:
* 1、String的相关操作
* 2、正则表达式的应用
*
* 思路:
* 1、观察规律,阿拉伯数字转化成汉字,每一个都有自己的单位,声明一个StringBuilder,从第一位开始添加单位以及数字
* 2、1001壹仟零壹,1100壹仟壹佰,1010壹仟零壹拾,1101壹仟壹佰零壹,可以看出只要两个非零数字中间有零就要写个零
* 3、最后,做一些替换
* */

public class demo31 {
        private static final char[] number = {'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
        private static final char[] units = {'圆','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟'};

        public static void main(String[] args) throws Exception {
                Scanner sc = new Scanner(System.in);
                while(sc.hasNext()){
                        long num = sc.nextLong();
                        if(num==0){
                                break;
                        }
                        String str = convert(num);
                        System.out.println(str);                               
                }
                sc.close();
        }
        private static String convert(long money) throws Exception{
                StringBuilder sb = new StringBuilder();
                int index = 0;
                while(money!=0){
                        sb.insert(0, units[index++]);
                        sb.insert(0, number[(int)(money%10)]);
                        money = money/10;
                }
                return sb.toString().replaceAll("零[仟佰拾]", "零").replaceAll("零+万", "万")
                                .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
                                .replaceAll("零+", "零").replaceAll("零圆", "圆");
        }
}

评分

参与人数 1黑马币 +5 收起 理由
土豆丝 + 5 赞一个!大神啊

查看全部评分

回复 使用道具 举报
楼上不错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马