数字转化成中文(int)

将一个正整数转化成中文(0~2^32-1)

例:100003
1,转换为list

  •   一	零	零	零	零	三
    

2 ,插入单位

  •   	一十   零个	 	万  	零千		零百 	零十		三个
    

3 ,去零和零的单位

  •   	一十		万  零	 三个
    

4 ,去除单位 “个”

  •   	一十		万  零	 三
    

检验数

(0)零
(100003)一十万零三
(854333219)八亿五千四百三十三万三千二百一十九
(1964403449)一十九亿六千四百四十万三千四百四十九
(435689022)四亿三千五百六十八万九千零二十二
(1119492792)一十一亿一千九百四十九万二千七百九十二
(1216391991)一十二亿一千六百三十九万一千九百九十一
(1506945591)一十五亿零六百九十四万五千五百九十一
(2073076683)二十亿七千三百零七万六千六百八十三
(1257921860)一十二亿五千七百九十二万一千八百六十
(1058521781)一十亿五千八百五十二万一千七百八十一
(133502345)一亿三千三百五十万二千三百四十五

代码

public class IntString {
	private static String[] capital  =new String[] {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
    private static HashMap<Integer,String> unit=new HashMap<Integer, String>() {{
    	put(1,"个");
    	put(10,"十");
    	put(100,"百");
    	put(1000,"千");
    	put(10000,"万");
    	put(100000000,"亿");
    }};
    private static ArrayList<String> toList(int value){
    	String valueString=String.valueOf(value);
    	ArrayList<String> list=new ArrayList<String>();
    	int up=1;
    	int lower=1;
    	for(int i=valueString.length()-1;i>=0;i--) {
    		int number=(int)(valueString.charAt(i)-48);
    		if(up==10000||up==100000000) {
    			String upUnit = unit.get(up);
    			list.add(0,upUnit);
    		}
    		String lowerUnit = unit.get(lower);
    		if(lowerUnit!=null) {
    			list.add(0,lowerUnit);
    		}
    		list.add(0,capital[number]);
			up*=10;
			if(lower==1000) {
				lower=1;
			}else
				lower*=10;
    	}
		return list;
    }
    public static String toCapital(int value) {
    	ArrayList<String> list = toList(value);
    	for(int i=0;i<list.size();i++) {
    		String itme = list.get(i);
    		if("零".equals(itme)) {
    			if(i>0) {
    				String last = list.get(i-1);
    				if("零".equals(last)) {
    					list.remove(i);
    					list.remove(i);
        				i--;
        				continue;
    				}
    			}
    			String next = list.get(i+1);
    			if("个".equals(next)) {
					list.remove(i);
					list.remove(i);
    				i--;
    			}else{
    				list.remove(i+1);
    			}
    		}
    	}
    	String ret="";
    	for(String e:list){
    		if(! "个".equals(e)) {
    			ret+=e;
    		}
    	}
		return ret.length()==0?"零":ret;
    }
	public static void main(String[] args) {
		System.out.println("("+0+")"+toCapital(0));
		System.out.println("("+100003+")"+toCapital(100003));
		for(int i=0;i<10;i++) {
			int value=(int) (Integer.MAX_VALUE * Math.random());
			System.out.println("("+value+")"+toCapital(value));
		}
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值