目录
数字拼接
数组长度不可变,集合长度可变。所以可以在底层使用集合的形式来定义一个方法,这个方法提供可变长度的数组,中间通过了集合的操作。
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();
}
}