现在的位置: 首页 > 综合 > 正文

Java学习笔记 实现阿拉伯数字(一亿以内)转换为中文繁体数字

2014年07月17日 ⁄ 综合 ⁄ 共 2406字 ⁄ 字号 评论关闭

开始学习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]+)?");

        }
    }


}

抱歉!评论已关闭.