数字转汉字

阿拉伯数字“0”有“零”和“〇”两种汉字书写形式。一个数字用做计量时,其中“0”的汉字书写形式为“零”,用做编号时,“0”的汉字书写形式为“〇”。java

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    private static final String[] CN_NUMBER = { "〇", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
    private static final String[] CN_UNIT = { "", "十", "百", "千" };

    /**
     * 格式化:数字转汉字
     * 未完待续..
     * @param str
     * @return
     */
    public String formatMethod(String str) {
        str = str.replace(" ", ""); //删除空格
        Pattern pattern = Pattern.compile("^\\d+(\\.\\d+)?$"); //非负数
        Matcher flag = pattern.matcher(str);
        if (!flag.matches()) {
            //System.out.println("格式不正确!");
            return null;
        }
        String p_int = str.split("\\.")[0]; //整数部分
        String p_dec = str.indexOf(".") == -1 ? "" : str.split("\\.")[1]; //小数部分
        String[] intArr = split(p_int); //分隔,每4位为一组
        return null;
    }

    /**
     * 格式化4位整数
     * @param str
     * @return
     */
    public String formatInt(String str) {
        StringBuilder sb = new StringBuilder();
        boolean isZero = false;
        for (int i = 0; i < str.length(); i++) {
            //int n = Integer.valueOf(str.charAt(i) + "");
            int n = str.charAt(i) - 48; //0-9的ASCII码为48-57
            if (n == 0) {
                isZero = true;
            } else {
                if (isZero) {
                    sb.append(CN_NUMBER[str.charAt(i - 1) - 48]);
                }
                sb.append(CN_NUMBER[n]);
                sb.append(CN_UNIT[str.length() - 1 - i]);
                isZero = false;
            }
        }
        return sb.toString();
    }

    /**
     * 分隔,每4位为一组。例:输入0123456,输出[0012, 3456]
     * @param num
     * @return
     */
    public String[] split(String num) {
        int remainder = num.length() % 4; //取余
        if (remainder != 0) {
            String pre = num.substring(0, remainder);
            String suf = num.substring(remainder);
            num = String.format("%04d", Integer.valueOf(pre)) + suf;
        }
        String[] arr = new String[num.length() / 4];
        int j = 0;
        for (int i = 0; i < num.length(); i += 4) {
            arr[j++] = num.substring(i, i + 4);
        }
        return arr;
    }

    /**
     * 例:输入2018,输出二〇一八
     * @param str
     * @return
     */
    public String toYear(String str) {
        StringBuilder sb = new StringBuilder(str);
        for (int i = 0; i < str.length(); i++) {
            sb.replace(i, i + 1, CN_NUMBER[str.charAt(i) - 48]);
        }
        return sb.toString();
    }
}
相关文章
相关标签/搜索