记一次数字转换中文,涉及Stringbuffer的insert的API问题和三位一逗问题

public static void main(String[] args) {
        Integer i = 5;
        String s = toChineseNumber(i);
        System.out.println("s = " + s);
    }
private static String toChineseNumber(Integer d){
       String[] str = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
       String s = String.valueOf(d);
       StringBuffer stringBuffer = new StringBuffer();
       for (int i = 0; i < s.length(); i++) {
           String index = String.valueOf(s.charAt(i));
           stringBuffer = stringBuffer.append(str[Integer.parseInt(index)]);
       }
       return stringBuffer.toString();
   }

f1066350f920425c81e43655ced14cd4.png

 根据字符串长度和charAt取出数字,以索引形式找中文字,那么如果是大数字,就需要使用到StringBuffer中的insert方法,insert中传两个参数:偏移量和插入的字符,先看源码

9b27ca51c1524660815c8784985c18ed.png

 测试:

public static void main(String[] args) {
        Integer i = 5;
        String s = toChineseNumber(i);
        System.out.println("s = " + s);
    }

private static String toChineseNumber(Integer d){
        String[] str = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
        String ss[] = new String[]{"", "十", "百", "千", "万", "十", "百", "千", "亿"};
        String s = String.valueOf(d);
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < s.length(); i++) {
            String index = String.valueOf(s.charAt(i));
            stringBuffer = stringBuffer.append(str[Integer.parseInt(index)]);
        }
        s = String.valueOf(stringBuffer);
        int i = 0;
        for (int j = s.length(); j > 0; j--) {
            stringBuffer = stringBuffer.insert(j, ss[i++]);
        }
        return stringBuffer.toString();
    }

 如此联想到金融行业中的三位一逗问题,也是可以通过insert来实现,但是由于金融数据有小数点为点间隔,所以三位一逗稍微复杂点,也可以使用DecimalFormat格式来定义实现,这个比较简单

public static void main(String[] args) {
        String str = "58888888888";
        String s1 = insertCharacter(str);
        System.out.println("s1 = " + s1);
    }
private static String insertCharacter(String str){
        return new DecimalFormat("#,###.00").format(new BigDecimal(str));
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值