數組拼接|數字金額轉英文

目錄

數字拼接

數字金額轉大寫


數字拼接

數組長度不可變,集合長度可變。所以可以在底層使用集合的形式來定義一個方法,這個方法提供可變長度的數組,中間通過了集合的操作。

import java.util.ArrayList;

class ByteGroup {
	ArrayList<Byte> byteContainer = new ArrayList<Byte>();

	public byte[] toBytes() {
		byte[] bytes = new byte[byteContainer.size()];
		for (int i = 0; i < byteContainer.size(); i++) {
			bytes[i] = byteContainer.get(i);
		}
		return bytes;
	}

	public ByteGroup addBytes(byte[] bytes) {
		for (byte b : bytes) {
			byteContainer.add(b);
		}
		return this;
	}

	public int size() {
		return byteContainer.size();
	}
}

數字金額轉大寫

public class CommonNumberHelper {

    private static final String CENTS = "cents";
    private static final String RUPPES = "ruppes only.";
    private static final String ZERO = "zero";
    private static final String AND = "and";
    private static final String SPACE = " ";
    private static final String[] UNIT = {"", "thousand", "million", "billion"};
    private static final String HUNDRED = "hundred";
    private static final String[] INDNUM = {"one", "two", "three", "four", "five", "six",
            "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
            "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
    private static final String[] DECNUM = {"twenty", "thirty", "forty", "fifty", "sixty",
            "seventy", "eighty", "ninety"};

    /**
     * Description: String類型Rs金額轉換成英文大寫<br>
     *
     * @author zhang.yifei4<br>
     * @taskId <br>
     * @param num <br>
     * @return <br>
     */
    public static String parseStrNum2Words(String num) {
        String[] split = num.split("\\.");
        StringBuffer sb = new StringBuffer();
        //split[0]存放的金額格式爲 Rs0000.00
        String integerStr = split[0].substring(2);
        int length = integerStr.length();
        //整數處理
        int integer = Integer.parseInt(integerStr);
        if(integer == 0) {
            sb.append(ZERO).append(" ");
        }
        List<String> list = new ArrayList<>();
        //每三位轉換一次大寫
        for(int i = 0; i < Math.ceil(length/3d); i++) {
            list.add(parseLeveledNum(integer%1000));
            integer/=1000;
        }
        for(int i = list.size()-1; i >= 0; i--) {
            sb.append(list.get(i));
            if(list.get(i).equals("")) continue;
            sb.append(UNIT[i]);
            if(i != 0) {
                sb.append(" ");
            }
        }
        //小數位處理
        if(split[1].length() > 1 && Integer.parseInt(split[1]) != 0) {
            int cents = Integer.parseInt(split[1].substring(0,2));//小數
            if(cents != 0) {
                sb.append(AND).append(" ").append(CENTS).append(" ").append(parseLeveledNum(cents));
            }
        }
        sb.append(RUPPES);
        return sb.toString();
    }

    private static String parseLeveledNum(int leveledNum) {
        //獲得三位數的個十百位
        int indi = leveledNum % 10 ;
        int ten = leveledNum / 10 % 10;
        int hund = leveledNum /100;
        StringBuffer result = new StringBuffer();
        if(hund == 0) {
            if(ten == 0) {
                if(indi == 0) {
                    result.append("");
                }else {
                    result.append(INDNUM[indi-1]).append(" ");
                }
            } else {
                if(ten >= 2) {
                    result.append(DECNUM[ten-2]).append(" ");
                    if(indi > 0) {
                        result.append(INDNUM[indi-1]).append(" ");
                    }
                } else {
                    result.append(INDNUM[ten*10+indi-1]).append(" ");
                }
            }
        } else {
            result.append(INDNUM[hund-1]).append(" ").append(HUNDRED).append(" ");
            if(ten == 0) {
                if(indi == 0) {
                    result.append("");
                }else {
                    result.append(AND).append(" ").append(INDNUM[indi-1]).append(" ");
                }
            } else {
                if(ten >= 2) {
                    result.append(AND).append(" ").append(DECNUM[ten-2]).append(" ");
                    if(indi > 0) {
                        result.append(INDNUM[indi-1]);
                    }
                } else {
                    result.append(AND).append(" ").append(INDNUM[ten*10+indi-1]).append(" ");
                }
            }
        }
        return result.toString();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章