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