인민폐 대문자 변환

6267 단어 바꾸다
import java.math.BigDecimal;

/**
 * @author shaoyaojie 2010-08-20
 *
 */
public class ChineseMoney {

    //     
    private static char[] CHINESE_DIGIT= { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' };

    //      
    private static final String POS[] = new String[] { " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " " };

    /**
     *             ( ~  )
     * 
     * @param chineseMoney
     *                   
     * @return     
     */
    public static String covertToDigital(String chineseMoney) {
        //     
        int yuanIndex = chineseMoney == null ? -1 : chineseMoney.indexOf(' ');
        if (yuanIndex < 0) {
            return "";
        }
        if (yuanIndex > 31) {
            return "    !";
        }

        char nowChar;

        BigDecimal iResult = BigDecimal.ZERO;
        //     ( , , , )
        BigDecimal iMoneyUnit = BigDecimal.ZERO;
        //     
        BigDecimal iDataUnit = BigDecimal.ZERO;
        //   
        BigDecimal bdcTenThousand = new BigDecimal("10000");

        char[] moneyChar = chineseMoney.toCharArray();
        for (int i = moneyChar.length - 1; i > -1; i--) {
            nowChar = moneyChar[i];
            //               
            for (int k = CHINESE_DIGIT.length - 1; k >= 0; k--) {
                if (nowChar == CHINESE_DIGIT[k]) {
                    nowChar = (char) ('0' + k);
                    break;
                }
            }

            if (nowChar >= '0' && nowChar <= '9') {
                iResult = iResult.add(iDataUnit.multiply(new BigDecimal(nowChar - '0')));
            } else if (nowChar == ' ') {
                // 1
                iDataUnit = iMoneyUnit = BigDecimal.ONE;
            } else if (nowChar == ' ') {
                // 10000
                iDataUnit = iMoneyUnit = bdcTenThousand;
            } else if (nowChar == ' ') {
                // 10000*10000
                iDataUnit = iMoneyUnit = bdcTenThousand.multiply(bdcTenThousand);
            } else if (nowChar == ' ') {
                // 10000*10000*1000
                iDataUnit = iMoneyUnit = bdcTenThousand.multiply(bdcTenThousand).multiply(bdcTenThousand);
            } else if (nowChar == ' ') {
                iDataUnit = iMoneyUnit.multiply(BigDecimal.TEN);
            } else if (nowChar == ' ') {
                iDataUnit = iMoneyUnit.multiply(new BigDecimal("100"));
            } else if (nowChar == ' ') {
                iDataUnit = iMoneyUnit.multiply(new BigDecimal("1000"));
            } else if (nowChar == ' ') {
                iDataUnit = new BigDecimal("0.1");
            } else if (nowChar == ' ') {
                iDataUnit = new BigDecimal("0.01");
            }
        }

        return iResult.toString();
    }

    /**
     *             (   )
     * 
     * @param money
     *                
     * @return        
     */
    public String change(String money) {

        BigDecimal bdMoney = BigDecimal.ZERO;
        try {
            //        ,      
            bdMoney = new BigDecimal(money);
        } catch (Exception ex) {
            throw new IllegalArgumentException("         !");
        }
        //        
        money = bdMoney.toString();
        if (money.indexOf('.') >= 0 && (money.length() - money.indexOf('.')) > 3) {

            throw new IllegalArgumentException("         !");
        }

        //       '0'~'9'    
        money = bdMoney.multiply(new BigDecimal("100")).abs().toString();
        money = money.indexOf('.') >= 0 ? money.substring(0, money.indexOf('.')) : money;

        char nowChar;
        String posStr;
        int posIndex;
        boolean oldCharIsZero = true;
        StringBuilder stb = new StringBuilder();

        for (int i = money.length() - 1; i >= 0; i--) {

            nowChar = money.charAt(i);
            posIndex = money.length() - 1 - i;
            //            ,  " ", " ", " ", " ", " ", " ", " ", " "    
            posIndex = posIndex >= POS.length ? (posIndex - 3) % (POS.length - 3) + 3 : posIndex;
            posStr = POS[posIndex];

            if (nowChar == '0') {
                if (posStr == " " || posStr == " " || posStr == " ") {
                    stb.append(posStr);
                }
                //        0,    ,           
                if (!oldCharIsZero) {
                    stb.append(" ");
                }
                oldCharIsZero = true;
            } else {
                oldCharIsZero = false;
                stb.append(posStr).append(CHINESE_DIGIT[nowChar - '0']);
            }
        }

        if (bdMoney.signum() == -1) {
            stb.append(" ");
        }
        stb.reverse();
        String ret = stb.toString();
        while(ret.indexOf("  ")>=0){
            ret = ret.replace("  ", " ");
        }
        ret = ret.indexOf(" ") < 0 ? ret + " " : ret;

        return ret;
    }
}

좋은 웹페이지 즐겨찾기