黑马程序员技术交流社区

标题: 金额转换为传统数字。思路及代码。 [打印本页]

作者: inception    时间: 2014-10-22 17:59
标题: 金额转换为传统数字。思路及代码。
    用到正则表达示replaceAll()和StringBuffer中的insert();
例:120000010
1.转换为汉字。   
    一二零零零零零一零
2.添加单位。      
    一亿二千零百零十零万零千零百一十零元
    实际是添加一个单位,再添加一个数字。
    如:元  > 零元 > 十零元 > 一十零元...
3.去掉"零百","零十","零千"的单位。
    一亿二千零零零万零零一十零元
    regex = "零[十百千]";
    replaceAll(regex,"零");
4.多个零变为一个零
    一亿二千零万零一十零元
    regex = "零+";
    replaceAll(regex,"零");  
5."零万"变为"万"
    一亿二千万零一十零元
    regex = "零万";
    replaceAll(regex,"万");
6."零元"变为"元"
    一亿二千万零一十元
    regex = "零元";
    replaceAll(regex,"元");
*/


作者: inception    时间: 2014-10-22 18:03
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
谢谢楼主分享
作者: 会飞的蜗牛    时间: 2014-10-22 21:27
我觉得开始做这题的思路应该是巧妙的利用

private static final char[] data = new char[]{'零','壹','贰','叁','肆','伍','陆','柒','捌','玖'};
    private static final char[] unit = new char[]{'元','拾','佰','仟','万','拾','佰','仟','亿'};
和阿拉伯数字的对应关系,至于你说的去零问题只是后面要注意的小细节。
作者: 十万一千    时间: 2014-10-22 22:33
如果输入超出十个亿了怎么解决。。。
作者: inception    时间: 2014-10-22 22:49
十万一千 发表于 2014-10-22 22:33
如果输入超出十个亿了怎么解决。。。

unit数组在,亿后面加    拾 佰 仟
作者: Eagle    时间: 2014-10-22 22:53
会飞的蜗牛 发表于 2014-10-22 21:27
我觉得开始做这题的思路应该是巧妙的利用

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

细节决定成败




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