Java阿拉伯数字转汉字表述

面试遇到算法题,就是把阿拉伯数字转化成汉字的描述,比如123是一百二十三,10080是一万零八十

自己尝试实现了一下,发现实现的太麻烦,代码太多而且容易有考虑不到的地方,下面贴出,自己的写法和网上找的比较简便的写法

自己的写法:

public class NumConvertUtil{
	private static final String[] nums=new String[]{"零","一","二","三","四","五","六","七","八","九"};
	private static final String[] units=new String[]{"十","百","千","万","亿"};

    public static void main(String[] args){
        //创建输入对象
		Scanner sc=new Scanner(System.in);
		//获取用户输入的字符串
		String str=null;
		int times=0;
		while(times<20){
			times++;
			System.out.print("请输入数字:");
			str=sc.nextLine();
			int num=Integer.parseInt(str);
			String res=convert(num);
			System.out.print("结果是:"+res);
		}
		
		//for(int i=10001;i<12001;i++){
		//	System.out.println(convert(i));
		//}
    }

	/**
	* 将数字转换为汉字  例如 123  一百二十三
	*   10340 一万零三百四十
	*/
	public static String convert(int input){
		
		String ouput="";
		if (input>=100000000){
			ouput=thousandAndLess(ouput,input/100000000);
			ouput+=units[4];
		}
		
		input=input%100000000;
		if(input>=10000){
			ouput=thousandAndLess(ouput,input/10000);
			ouput+=units[3];
		}else{
			ouput+=addZero(ouput);
		}
		
		input=input%10000;
		ouput=thousandAndLess(ouput,input);
		return ouput;
	}

	//获取千及以下
	private static String thousandAndLess(String ouput,int input){
		if (input/1000>0){
			ouput+=nums[input/1000];
			ouput+=units[2];
		}else{
			ouput+=addZero(ouput);
		}
		input=input%1000;
		if (input/100>0){
			ouput+=nums[input/100];
			ouput+=units[1];
		}else{
			ouput+=addZero(ouput);
		}
		input=input%100;
		if (input/10>0){
			if(ouput.length()>0||input/10>1){
				ouput+=nums[input/10];
			}
			ouput+=units[0];
		}else{
			ouput+=addZero(ouput);
		}
		input=input%10;
		if (input>0){
			ouput+=nums[input];
		}
		if (ouput.length()>0&&nums[0].equals(ouput.substring(ouput.length()-1))){
			ouput=ouput.substring(0,ouput.length()-1);
		}
		return ouput;
	}

	private static String addZero(String ouput){
		if(ouput.length()>0&&!nums[0].equals(ouput.substring(ouput.length()-1))&&!units[0].equals(ouput.substring(ouput.length()-1))){
			return nums[0];
		}else{
			return "";
		}
	}
}

网上的写法
java中数字转汉字

public class NumConvertChinese{
	private static final String[] nums=new String[]{"零","一","二","三","四","五","六","七","八","九"};
	private static final String[] units=new String[]{"","十","百","千","万","十","百","千","亿","十","百","千"};

    public static void main(String[] args){
        //创建输入对象
		Scanner sc=new Scanner(System.in);
		//获取用户输入的字符串
		/* String str=null;
		int times=0;
		System.out.print("请输入数字:");
		str=sc.nextLine();
		int num=Integer.parseInt(str);
		String res=convert(num);
		System.out.print("结果是:"+res); */
		/* while(times<20){
			times++;
			System.out.print("请输入数字:");
			str=sc.nextLine();
			int num=Integer.parseInt(str);
			String res=convert(num);
			System.out.print("结果是:"+res);
		} */
		
		for(int i=10001;i<12001;i++){
			System.out.println(convert(i));
		}
    }

	/**
	* 将数字转换为汉字  例如 123  一百二十三
	*   10340 一万零三百四十
	*/
	public static String convert(int input){
		
		String output="";
		int count=0;
		while(input>0){
			output=nums[input%10]+units[count]+output;
			input=input/10;
			count++;
		}

		return output.replaceAll("零[千百十]", "零").replaceAll("零+万", "万")
                .replaceAll("零+亿", "亿").replaceAll("亿万", "亿零")
                .replaceAll("零+", "零").replaceAll("零$", "");
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值