1. 程式人生 > >Java 將小寫金額轉換成大寫金額

Java 將小寫金額轉換成大寫金額

將小寫金額轉換成大寫金額
例如:110.00轉換後為 壹佰壹拾圓整
程式碼如下

/**
     * 將小寫金額轉換為大寫
     * 
     * @param amount
     *            110.00
     * @return 壹佰壹拾圓整
     */
    public static String amountToUpper(String amount) throws Exception {
        // String[] lowerAmount = { "0", "1", "2", "3", "4", "5", "6", "7", "8",
        // "9"
}; String[] upperAmount = { "零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖" }; String[] unit = { "分", "角", "圓", "拾", "佰", "仟", "萬", "億" }; String wholeUnit = "整"; StringBuffer result = new StringBuffer(); if (StringUtil.isEmpty(amount)) { return ""
; } // 為0 if (Double.valueOf(amount) == 0) { return upperAmount[0]; } // 去掉開頭和結尾的0 amount = amount.replaceAll("^0*", ""); if (amount.startsWith(".")) { amount = "0" + amount; } if (amount.indexOf(".") > -1) { amount = amount.replaceAll
("0*$|\\.0{1,2}$", ""); } // 判斷格式 Pattern p = Pattern.compile("\\d{1,12}(\\.\\d{1,2})?"); Matcher m = p.matcher(amount); if (!m.matches()) { throw new Exception("金額格式不正確! "); } // 分成整數和小數分別讀 String whole = ""; String integral = ""; if (amount.indexOf(".") > -1) { whole = amount.split("\\.")[0]; integral = amount.split("\\.")[1]; } else { whole = amount; } // 整數讀法 StringBuffer sceAmount = new StringBuffer(whole); if (sceAmount.length() > 4) { // 每4位用逗號分隔 int count = sceAmount.length() / 4; for (int i = 0; i <= count; i++) { if (i == 1) { sceAmount.insert(sceAmount.length() - 4 * i, ","); } else if (i > 1) { sceAmount.insert(sceAmount.length() - 4 * i - 1, ","); } } } String[] sce = sceAmount.toString().split(","); for (int i = sce.length - 1; i >= 0; i--) { // 每4位迴圈讀 StringBuffer oneComma = new StringBuffer(); if (Pattern.compile("\\d{1,4}").matcher(sce[i]).matches()) { if (Pattern.compile("[1-9]{4}").matcher(sce[i]).matches()) { // 不含有0 int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[h]) .append(unit[4]) .append(upperAmount[d]) .append(unit[3]) .append(upperAmount[e]); } else if (Pattern .compile("0{1}[1-9]{1}0{1}[1-9]{1}") .matcher(sce[i]) .matches()) { int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[0]) .append(upperAmount[h]) .append(unit[4]) .append(upperAmount[0]) .append(upperAmount[e]); } else if (Pattern .compile("0{1,3}[1-9]{1}") .matcher(sce[i]) .matches()) { int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[0]).append(upperAmount[e]); } else if (Pattern .compile("0{1,2}[1-9]{1}0{1}") .matcher(sce[i]) .matches()) { int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 oneComma.append(upperAmount[0]) .append(upperAmount[d]) .append(unit[3]); } else if (Pattern .compile("0{1}[1-9]{1}0{2}") .matcher(sce[i]) .matches()) { int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 oneComma.append(upperAmount[0]) .append(upperAmount[h]) .append(unit[4]); } else if (Pattern .compile("[1-9]{1}0{3}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 oneComma.append(upperAmount[t]).append(unit[5]); } else if (Pattern .compile("[1-9]{2}0{2}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[h]) .append(unit[4]); } else if (Pattern .compile("[1-9]{1}0{1}[1-9]{1}0{1}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[0]) .append(upperAmount[d]) .append(unit[3]); } else if (Pattern .compile("[1-9]{1}0{2}[1-9]{1}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[0]) .append(upperAmount[e]); } else if (Pattern .compile("0{1}[1-9]{2}0{1}") .matcher(sce[i]) .matches()) { int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 oneComma.append(upperAmount[0]) .append(upperAmount[h]) .append(unit[4]) .append(upperAmount[d]) .append(unit[3]); } else if (Pattern .compile("0{1,2}[1-9]{2}") .matcher(sce[i]) .matches()) { int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[0]) .append(upperAmount[d]) .append(unit[3]) .append(upperAmount[e]); } else if (Pattern .compile("[1-9]{3}0{1}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[h]) .append(unit[4]) .append(upperAmount[d]) .append(unit[3]); } else if (Pattern .compile("[1-9]{2}0{1}[1-9]{1}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[h]) .append(unit[4]) .append(upperAmount[0]) .append(upperAmount[e]); } else if (Pattern .compile("0{1}[1-9]{3}") .matcher(sce[i]) .matches()) { // 四位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 百位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[0]) .append(upperAmount[h]) .append(unit[4]) .append(upperAmount[d]) .append(unit[3]) .append(upperAmount[e]); } else if (Pattern .compile("[1-9]{1}0{1}[1-9]{2}") .matcher(sce[i]) .matches()) { int t = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 千位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 十位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(3))); // 個位 oneComma.append(upperAmount[t]) .append(unit[5]) .append(upperAmount[0]) .append(upperAmount[d]) .append(unit[3]) .append(upperAmount[e]); } else if (Pattern .compile("[1-9]{3}") .matcher(sce[i]) .matches()) { // 三位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 百位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 十位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 個位 oneComma.append(upperAmount[h]) .append(unit[4]) .append(upperAmount[d]) .append(unit[3]) .append(upperAmount[e]); } else if (Pattern .compile("[1-9]{1}0{2}") .matcher(sce[i]) .matches()) { // 三位 int h = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 百位 oneComma.append(upperAmount[h]).append(unit[4]); } else if (Pattern .compile("[1-9]{1}0{1}[1-9]{1}") .matcher(sce[i]) .matches()) { int h = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 百位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(2))); // 個位 oneComma.append(upperAmount[h]) .append(unit[4]) .append(upperAmount[0]) .append(upperAmount[e]); } else if (Pattern .compile("[1-9]{2}0{1}") .matcher(sce[i]) .matches()) { int h = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 百位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 十位 oneComma.append(upperAmount[h]) .append(unit[4]) .append(upperAmount[d]) .append(unit[3]); } else if (Pattern .compile("[1-9]{1}") .matcher(sce[i]) .matches()) { int e = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 個位 oneComma.append(upperAmount[e]); } else if (Pattern .compile("[1-9]{2}") .matcher(sce[i]) .matches()) { // 兩位 int d = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 十位 int e = Integer.valueOf(String.valueOf(sce[i].charAt(1))); // 個位 oneComma.append(upperAmount[d]) .append(unit[3]) .append(upperAmount[e]); } else if (Pattern .compile("[1-9]{1}0{1}") .matcher(sce[i]) .matches()) { int d = Integer.valueOf(String.valueOf(sce[i].charAt(0))); // 十位 oneComma.append(upperAmount[d]).append(unit[3]); } } if (sce.length == 3) { if (i == 2) { result.insert(0, oneComma.toString()).append(unit[2]); } else if (i == 1) {// 有一個逗號(包含萬位單位) oneComma.append(unit[6]); result.insert(0, oneComma.toString()); } else if (i == 0) { // 有兩個逗號(包含億位單位) oneComma.append(unit[7]); result.insert(0, oneComma.toString()); } } else if (sce.length == 2) { if (i == 1) { result.insert(0, oneComma.toString()).append(unit[2]); } else if (i == 0) {// 有一個逗號(包含萬位單位) oneComma.append(unit[6]); result.insert(0, oneComma.toString()); } } else if (sce.length == 1) {// 沒有逗號,最大單位為千 result.insert(0, oneComma.toString()).append(unit[2]); } } // 小數讀法 if (integral.length() == 1) { // 只帶角 result .append(upperAmount[0]) .append(upperAmount[Integer.valueOf(integral)]) .append(unit[1]); } else if (integral.length() == 2) { if (!integral.startsWith("0")) {// 有角有分 result .append(upperAmount[0]) .append(upperAmount[Integer.valueOf(String.valueOf(integral.charAt(0)))]) .append(unit[1]) .append(upperAmount[Integer.valueOf(String.valueOf(integral.charAt(1)))]) .append(unit[0]); } else {// 只有分 result .append(upperAmount[0]) .append(upperAmount[Integer.valueOf(String.valueOf(integral.charAt(1)))]) .append(unit[0]); } } else if (integral.equals("")) { result.append(wholeUnit); } return result.toString(); }