package org.phyeas.demo.number;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class NumberToRMB {
    private static String[] UNIT = { "元", "万", "亿" };
    private static String[] UNIT2 = { "千", "百", "十" };
    private static final String ZERO = "零";
    private static String[] NUM = { "壹", "贰", "三", "肆", "伍", "陆", "柒", "捌",
            "玖", "拾" };
    /**
     * 转换一串字符
     * 
     * @param str
     * @return
     */
    public static String parseCharsToRMB(String str) {
        if (!isNumber(str)) {
            throw new IllegalArgumentException("参数不正确,必须为数字");
        }
        StringBuffer buffer = new StringBuffer();
        int count = 0;
        for (int i = str.length(); i > 0; i -= 4, count++) {
            String char4 = null;
            if (i - 4 < 0) {
                System.out.println("start=" + 0 + ".end=" + i);
                char4 = str.substring(0, i);
                buffer.insert(0, parse4CharsToRMB(char4) + UNIT[count]);
                break;
            }
            System.out.println("start=" + (i - 4) + ".end=" + i);
            char4 = str.substring(i - 4, i);
            buffer.insert(0, parse4CharsToRMB(char4) + UNIT[count]);
        }
        return buffer.toString();
    }
    /**
     * 转换4位字符
     * 
     * @param str
     * @return
     */
    public static String parse4CharsToRMB(String str) {
        if (str.length() > 4 || !isNumber(str)) {
            throw new IllegalArgumentException("参数不正确,str应该为不大于4位的字符");
        }
        StringBuffer result = new StringBuffer();
        int startUNIT = getStartUNIT(str.length());
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '0') {
                if (i == 0) {
                    result.append(ZERO);
                } else {
                    appendZero(result, i);
                }
                startUNIT++;
            } else {
                int index = Integer.parseInt(String.valueOf(str.charAt(i))) - 1;
                result.append(NUM[index]);
                if (startUNIT < UNIT2.length) {
                    result.append(UNIT2[startUNIT]);
                    startUNIT++;
                }
            }
        }
        return result.toString();
    }
    /**
     * 获取起始位置
     * 
     * @param strLength
     * @return
     */
    public static int getStartUNIT(int strLength) {
        switch (strLength) {
        case 4:
            return 0;
        case 3:
            return 1;
        case 2:
            return 2;
        case 1:
            return 3;
        default:
            return 0;
        }
    }
    /**
     * 0是特殊的。所以单独一个方法添加0
     * 
     * @param buffer
     * @param index
     * @return
     */
    private static StringBuffer appendZero(StringBuffer buffer, int index) {
        System.out.println("buffer=" + buffer);
        String before = buffer.substring(index, index + 1);
        System.out.println("before=" + before);
        if (before.equals(ZERO)) {
            return buffer;
        } else {
            buffer.append(ZERO);
        }
        return buffer;
    }
    /**
     * 判断是否为数字字符串
     * 
     * @param str
     * @return
     */
    public static boolean isNumber(String str) {
        if (str != null && str.length() > 0) {
            Pattern pattern = Pattern.compile("[0-9]*");
            Matcher m = pattern.matcher(str);
            if (m.find()) {
                return true;
            }
            return false;
        }
        return false;
    }
    public static void main(String[] args) {
        System.out.println("转换1580654=" + parseCharsToRMB("1580654"));
    }
}
	posted on 2008-06-30 20:38 
phyeas 阅读(396) 
评论(3)  编辑  收藏