数组拼接|数字金额转英文

目录

数字拼接

数字金额转大写


数字拼接

数组长度不可变,集合长度可变。所以可以在底层使用集合的形式来定义一个方法,这个方法提供可变长度的数组,中间通过了集合的操作。

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();
    }
}

 

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