`
cheer_nice
  • 浏览: 103141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

银行考题,将阿拉伯数字转换成大写的汉字模式

阅读更多

银行考题,将阿拉伯数字转换成大写的汉字模式

例如 

 

123456789.01  -> 壹亿贰千叁百肆十伍万陆千柒百捌十玖元零壹分

假定:  最小到“分”  最大到 “亿”


仿照之前写过的那个 罗马数字与阿拉伯数字转换的程序写的
1.用数组存 壹.... 
2.用数组存 十 百 千
3.按照“.” 分割 分别处理整数分数   按照“.” 分割 请注意 http://www.iteye.com/topic/165494
4.对“零”的处理
5.正则表达式检验输入有效性 (正则表达式 有必要好好的看看 总结总结  达到能够直接写出来的地步!!!)  后续加上

public class ConvertFromNumericToChinese {
	/**
	 * split 是String的方法 不是StringBuilder的,split(.)的时候的注意问题http://www.iteye.com/topic/165494,
	 * 然后字符串的高低位问题  "123"   第0位 ‘1’.  第1位 ‘2’  这样
 	 * @param args
	 */
	private static String[] chinese = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
	private static String[] units = {"","十","百","千"};
	private static Object String;
	
	private static String convert(String num)
	{
 		StringBuilder sb = new StringBuilder(num);
		String[] str = num.split("\\.");
  		if(str.length==1)
		{//没有小数
			String zheng = convertZheng(str[0]);
 			return zheng+"元整";
		}
  		else
  		{//小数情况
  			String zheng = convertZheng(str[0])+"元";
   			String fen = convertFen(str[1]);
  			return zheng+fen;
  		}
	}   
	private static String convertFen(String str) {
		int length = str.length();
		String temp ="";
		if(length==1)
			temp = chinese[Integer.parseInt(str)]+"角";  
		else{
			if(Integer.parseInt(""+str.charAt(0))!=0)
				temp = chinese[Integer.parseInt(""+str.charAt(0))]+"角";
			else
				temp = "零";
			temp += chinese[Integer.parseInt(""+str.charAt(1))]+"分";
		}
		return temp;
	}
	private static String convertZheng(String str) {
		int length = str.length();
		int startUderWan=0;
		int startY = 0;
		String temp = "";//用于拼接字符串  最后返回
		
		if(length>8)
		{//上亿了。。。
			startY = 1;
			temp += chinese[Integer.parseInt(""+str.charAt(0))]+"亿";
		}
		if(length>4)
		{//上万了
			
			String str1 = str.substring(startY,length-4);
			startUderWan = startY+startUderWan+str1.length();
			List<String> result1 = new ArrayList<String>();
			for(int i=0; i<str1.length(); i++)
			{
	 			if((""+str1.charAt(i)).equals("0"))
	 			{
	 				result1.add("零");
	 				continue;
	 			}
	 			result1.add(chinese[Integer.parseInt(""+str1.charAt(i))]+units[str1.length()-1-i]);
			}
			for(int i=0; i<result1.size(); i++)
			{
				if(result1.get(i).equals("零")&&(i+1)<result1.size()&&result1.get(i+1).equals("零"))
	 			{
					continue;
	 			}
	 			temp +=result1.get(i);
			}
			if(temp.endsWith("零"))
				temp = temp.substring(0,temp.length()-1);
			if(!temp.endsWith("亿"))//这种情况100005675  不能带 “万”
				temp+="万";
		}
		
		
 		List<String> result = new ArrayList<String>();
		for(int i=startUderWan; i<length; i++)
		{
 			if((""+str.charAt(i)).equals("0"))
 			{
 				result.add("零");
 				continue;
 			}
 			result.add(chinese[Integer.parseInt(""+str.charAt(i))]+units[length-1-i]);
		}
		
		for(int i=0; i<result.size(); i++)
		{
			
			if(result.get(i).equals("零")&&(i+1)<result.size()&&result.get(i+1).equals("零"))
 			{
				continue;
 			}
 			temp +=result.get(i);
		}
		if(temp.endsWith("零"))
			temp = temp.substring(0, temp.length()-1);
 		return temp;
	}
	
	private static boolean isValid(String num) {
		//后续加上
 		String matchStr = "。。。。。。。。。。。。";
		boolean isValid = num.matches(matchStr);
		return isValid;
	}

	public static void main(String[] args) {
   		String s = "123456789.01";
 		String result = convert(s);
		System.out.println(result);
	}

}
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics