看到一题华为面试题,数字转成人民币,写了个方法.如: 12345转为一万二千三百四十五元.
1.注意特殊字符的处理
2.性能. 少用string的replace等方法,这种方法没有index,遍历string很费性能,应在一个循环中做,而不是多次循环.
public class NumberToMenoy {
public static void main(String[] args) {
NumberToMenoy t = new NumberToMenoy();
long t1 = System.currentTimeMillis();
String[] num = new String[5];
num[0] = "1234567890";
num[1] = "1000000000";
num[2] = "1000500022";
num[3] = "1000000000000000000";
num[4] = "10000000000000";
for(int j =0;j<10000;j++){
for (int i = 0; i < num.length; i++) {
t.conversion(num[i]);
}
}
long t2 = System.currentTimeMillis() - t1 ;
System.out.println("运算时间:"+t2);
}
public void conversion(String money){
String[] cn = {"零","一","二","三","四","五","六","七","八","九"};
String[] unit = {"十","百","千"};
StringBuffer cnMoney = new StringBuffer();
int m ;
int b = 0;
int le = money.length();
for(int i = 0;i<le;i++){
m = Integer.parseInt( money.substring(i,i+1) );
b += m ;
if( !(m == 0 && cnMoney.charAt(cnMoney.length()-1) == '零') ){
cnMoney.append(cn[m]);
}
int j = (money.length()-i-1) % 4 ;
if( j == 0 ){
if (cnMoney.charAt(cnMoney.length() - 1) == '零') {
cnMoney.deleteCharAt(cnMoney.length() - 1);
}
if( (money.length()-i-1)/4%2==0){
cnMoney.append("亿");
}else{
if(b != 0){
cnMoney.append("万");
}
}
b = 0 ;
}else{
if(m != 0){
cnMoney.append(unit[j-1]);
}
}
}
if(cnMoney.charAt(0)=='一' && cnMoney.charAt(1)=='十'){
cnMoney.deleteCharAt(0);
}
cnMoney.replace(cnMoney.length()-1, cnMoney.length(), "元");
//System.out.println(money+" "+cnMoney);
}
}