银行试题,将阿拉伯数字转换成大写的汉字模式
银行考题,将阿拉伯数字转换成大写的汉字模式
银行考题,将阿拉伯数字转换成大写的汉字模式
例如
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); } }