java 阿拉伯数字转中文_Java学习笔记 实现阿拉伯数字(一亿以内)转换为中文繁体数字 | 学步园...

开始学习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

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]+)?");

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值