开始学习java编程,有看到一道题目(如题),便决定自己动手实现一下,发现什么事儿都是动手比想象的难好多,借鉴了网上高手的正则表达式,请各位高手指教。
/**
* Created by charleszhu on 14-2-1.
*/
public class NumbertoChinese {
private final static String[] a_strNumber = { "零", "壹", "贰", "叁", "肆", "伍",
"陆", "柒", "捌", "玖" };
private final static String[] b_strNumber = { "","","拾","佰", "仟" ,"万"};
public static void main(String[] args){
// 测试数据
String strNum = "-12230344.102212";
if(isNumber(strNum)) {
String chinese = all2Chinese(strNum);
System.out.println(chinese);
}
else{
System.out.println("您输入的不是数字");
}
}
// 把所有的数字放转换成汉字
private static String all2Chinese(String strNum){
// 查看是否有小数
int index = strNum.indexOf(".");
// 查看是负数
int nindex = strNum.indexOf("-");
String chinese;
if (nindex != -1){
if(index == -1)
chinese = NumbertoChinese.zhengShu(strNum.substring(1));
else
chinese = NumbertoChinese.zhengShu(strNum.substring(1,index))+" 點 "+ NumbertoChinese.xiaoShu(strNum.substring(index + 1));
chinese = "负 "+chinese;
}else{
if(index == -1)
chinese = NumbertoChinese.zhengShu(strNum);
else
chinese = NumbertoChinese.zhengShu(strNum.substring(0,index))+" 點 "+ NumbertoChinese.xiaoShu(strNum.substring(index + 1));
}
return chinese;
}
// 处理小数部分
private static String xiaoShu(String number){
StringBuffer s0 = new StringBuffer();
for (int i = 0; i < number.length(); i++) {
Character a = number.charAt(i);
int num = Integer.parseInt(a.toString());
s0.append(a_strNumber[num]);
}
return s0.toString();
}
// 处理不高于8位的整数
private static String zhengShu(String number){
int length = number.length();
StringBuffer s0 = new StringBuffer();
// 如果只有4位不到的时候
if(length<=4){
s0.append(num2Chinese(number));
}else{
// 当数字超过4位的时候
// 先计算高4位的数字
String high4 = number.substring(0,length-4);
s0.append(num2Chinese(high4)).append("万");
// 在计算后面4位的数字
String low4 = number.substring(high4.length());
// 如果后面的数字小于1000,则要加汉字零
if(Integer.parseInt(low4)<=999)
s0.append("零").append(num2Chinese(low4));
else
s0.append(num2Chinese(low4));
}
return s0.toString();
}
// 将4位数字转换为汉字数字
private static String num2Chinese(String number){
int length = number.length();
StringBuffer s0 = new StringBuffer();
// 用于表示是该数字前面都是0
int flag = 0;
for(int i = number.length(),j=0; i>0;i--,j++){
Character a = number.charAt(j);
int num = Integer.parseInt(a.toString());
// 如果数字为零,则判断是否可以加汉字零
if(num == 0){
if(flag != 0){
// 判断是不是后面全部为0,若有一个不是,则可以加一个零
for(int s =j ;s<length;s++){
if(number.charAt(s) != '0'){
s0.append("零");
flag=0;
}
}
}
}else{ // 如果不是零,按照位数来进行加数字
String str = a_strNumber[num]+b_strNumber[i];
s0.append(str);
flag=1;
}
}
return s0.toString();
}
// 判断是输入的字符串是否是数字
private static boolean isNumber(String num){
if(null == num)
return false;
else {
return num.matches("[+-]?[1-9]+[0-9]*(\\.[0-9]+)?");
}
}
}