[Java]阿拉伯数字转中文数字

import java.util.*;

class Main{
    
    public static void main(String[] args){
        //toChineseNumber(12341234);
        toChineseNumber(400001204);
        toChineseNumber(400000000);
        //toChineseNumber(1204);
        //toChineseNumber(1004);
        //toChineseNumber(104);
        //toChineseNumber(100);
        
    }
    
    static String[] bigUnits=new String[]{"","万","亿"};
    //万亿以下正整数
    static void toChineseNumber(int num){
        List<Integer> list = new ArrayList<>();
        while(num > 0){
            list.add(num % 10000);
            num /= 10000;
        }
        StringBuilder builder = new StringBuilder();
        for (int i = list.size()-1; i >=0; i--){
            String f4=trans4(String.valueOf(list.get(i)).toCharArray());
            if("".equals(f4)){
                builder.append('零');
            }
            else {
                String uf4 = bigUnits[i];
                builder.append(f4).append(uf4);
            }
        }
        System.out.println(handleZero(builder.toString()));
    }
    
    
    static char[] wei=new char[]{'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'};
    static String[] units=new String[]{"","十","百","千"};
    
    static String trans4(char[] num){
        int n=num.length;
        String res="";
        //1234
        for(int i = 0 ; i < n ; i++){
            char c=wei[num[i]-'0'];
            String u=units[n-i-1];
            if(c=='零'){
                u="";
            }
            res+=c+u;
        }
        return handleZero(res);
    }
    
    static String handleZero(String num){
        char[] str = num.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int l=0,r; l < str.length; l++) {
            sb.append(str[l]);
            r=l;
            if(str[r]=='零'){
                while(r+1<str.length && str[r+1]=='零'){
                    r++;
                }
            }
            l=r;
        }
        if(sb.charAt(sb.length()-1)=='零'){sb.deleteCharAt(sb.length()-1);}
        return sb.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值