1234转换一二三四

来源:互联网 发布:龙升级数据 编辑:程序博客网 时间:2024/05/02 00:09
package com.test;
/**
 *
 * 类名: NumberChangeUtil</br>
 * 包名:com.test </br>
 * 描述: 1234转换一二三四</br>
 * 发布版本号:</br>
 * 开发人员: 朱海涛</br>
 * 创建时间: 2013-8-1</br>
 */
public class NumberChangeUtil {
    // 阿拉伯数字,字符串类型
    public String number;
    // 阿拉伯数字,int类型
    public int inumber;
    // 阿拉伯数字的位数
    public int size;

    // 构造函数
    NumberChangeUtil(String value) {
        number = value;
        inumber = Integer.parseInt(value);
        size = NumberChangeUtil.getLength(inumber);
    }

    // 阿拉伯数字每一位
    public static final String[] num = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
    // 中文数字每一位
    public static final String[] china = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
    // 中文数字进位度量
    public static final String[] degree = { "十", "百", "千", "万", "亿" };

    // 计算输入数据长度
    public static int getLength(int value) {
        return (int) Math.floor((int) (Math.log10(value) + 1));
    }

    // 将输入数字转换成相应文字,不添加度量
    public static String convertAtoW(String value) {
        for (int i = 0; i < num.length; i++) {
            value = value.replaceAll(num[i], china[i]);
        }
        return value;
    }

    // 度量处理方法,处理到最高位为九位的数字,如果处理更高位的数字则需要做微小改动
    public String degree(String value) {
        StringBuffer temp = new StringBuffer(value);
        // 添加"拾"
        if (size > 1) {
            temp = temp.insert(temp.length() - 1, degree[0]);
            if ((temp.substring(0, 1)).equals("一") && temp.length() == 3) {
                temp = temp.replace(0, 1, "");
            }
        }
        // 添加"百"
        if (size > 2) {
            temp = temp.insert(temp.length() - 3, degree[1]);
        }
        // 添加"千"
        if (size > 3) {
            temp = temp.insert(temp.length() - 5, degree[2]);
        }
        // 添加"万"
        if (size > 4) {
            temp = temp.insert(temp.length() - 7, degree[3]);
        }
        // 添加"拾万"
        if (size > 5) {
            temp = temp.insert(temp.length() - 9, degree[0]);
        }
        // 添加"百万"
        if (size > 6) {
            temp = temp.insert(temp.length() - 11, degree[1]);
        }
        // 添加"千万"
        if (size > 7) {
            temp = temp.insert(temp.length() - 13, degree[2]);
        }
        // 添加"亿"
        if (size > 8) {
            temp = temp.insert(temp.length() - 15, degree[4]);
        }
        // 添加"拾亿"以后处理类似,需要用BigInteger
        return temp.toString();
    }

    // 处理多零情况
    public String degreezero(String value) {
        String temp = new String(value);
        while ((temp.indexOf("零千") != -1) || (temp.indexOf("零百") != -1) || (temp.indexOf("零十") != -1) || (temp.indexOf("零零") != -1)) {
            if (temp.indexOf("零千") != -1) {
                temp = temp.replaceAll("零千", "零");
            }
            if (temp.indexOf("零百") != -1) {
                temp = temp.replaceAll("零百", "零");
            }
            if (temp.indexOf("零十") != -1) {
                temp = temp.replaceAll("零十", "零");
            }
            if (temp.indexOf("零零") != -1) {
                temp = temp.replaceAll("零零", "零");
            }
        }
        if ((temp.indexOf("零万") != -1)) {
            temp = temp.replaceAll("零万", "万");
        }
        if ((temp.indexOf("亿万") != -1)) {
            temp = temp.replaceAll("万", "");
        }

        // 末尾不能有零
        if (temp.lastIndexOf("零") == temp.length() - 1) {
            temp = temp.substring(0, temp.length() - 1);
        }
        return temp;
    }

    public static String change(int i) {
        NumberChangeUtil numberChange = new NumberChangeUtil(String.valueOf(i));
        return numberChange.degreezero(numberChange.degree(NumberChangeUtil.convertAtoW(numberChange.number)));
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NumberChangeUtil numberChange = new NumberChangeUtil("11");
        String result = numberChange.degreezero(numberChange.degree(NumberChangeUtil.convertAtoW(numberChange.number)));
        System.out.println(result);

    }

}