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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© inception 中级黑马   /  2014-10-22 17:59  /  1799 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

    用到正则表达示replaceAll()和StringBuffer中的insert();
例:120000010
1.转换为汉字。   
    一二零零零零零一零
2.添加单位。      
    一亿二千零百零十零万零千零百一十零元
    实际是添加一个单位,再添加一个数字。
    如:元  > 零元 > 十零元 > 一十零元...
3.去掉"零百","零十","零千"的单位。
    一亿二千零零零万零零一十零元
    regex = "零[十百千]";
    replaceAll(regex,"零");
4.多个零变为一个零
    一亿二千零万零一十零元
    regex = "零+";
    replaceAll(regex,"零");  
5."零万"变为"万"
    一亿二千万零一十零元
    regex = "零万";
    replaceAll(regex,"万");
6."零元"变为"元"
    一亿二千万零一十元
    regex = "零元";
    replaceAll(regex,"元");
*/

评分

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

查看全部评分

6 个回复

倒序浏览
private static final char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    private static final char[] unit = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
    private static String convert(int money){
        StringBuffer sb = new StringBuffer();
        int index = 0;
        while(money!=0) {
            sb.insert(0,unit[index++]); //0脚标,插入一个单位
            int num = money%10; //某单位对应的数字
            sb.insert(0, data[num]); //0脚标,插入一个数字对应的汉字
            //System.out.println(sb.toString());//打印添加单位的过程
            money /= 10; //其余单位的数字。
        }
        return sb.toString().replaceAll("零[拾佰仟]","零").replaceAll("零+","零").replaceAll("零万","万").replaceAll("零元","元");
回复 使用道具 举报
suoxidong 来自手机 中级黑马 2014-10-22 21:15:41
藤椅
谢谢楼主分享
回复 使用道具 举报
我觉得开始做这题的思路应该是巧妙的利用

private static final char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    private static final char[] unit = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
和阿拉伯数字的对应关系,至于你说的去零问题只是后面要注意的小细节。
回复 使用道具 举报
如果输入超出十个亿了怎么解决。。。
回复 使用道具 举报
inception 来自手机 中级黑马 2014-10-22 22:49:51
地板
十万一千 发表于 2014-10-22 22:33
如果输入超出十个亿了怎么解决。。。

unit数组在,亿后面加    拾 佰 仟
回复 使用道具 举报
Eagle 高级黑马 2014-10-22 22:53:39
7#
会飞的蜗牛 发表于 2014-10-22 21:27
我觉得开始做这题的思路应该是巧妙的利用

private static final char[] data = new char[]{'零','壹','贰' ...

细节决定成败
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马