支持千兆的小写金额转中文大写金额
import java.io.*;

public class Money
  {
 static final String[] digits = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
 static final String[] units = {"仟", "佰", "拾", "兆", "仟", "佰", "拾", "亿", "仟", "佰", "拾", "万", "仟", "佰", "拾", "元"};
 public static String display(String money) {
if (money==null || money.trim().length()==0)
 {
return "零元整";
}
money = money.trim();
if (money.matches("0") || money.matches("\\."))
 {
return "零元整";
}
StringBuffer sub = new StringBuffer("");
int dotPos = 0;
String head = "";
String tail = "";

dotPos = money.lastIndexOf(".");
if (dotPos==-1)
 {
head = money;
tail = "00";
}
 else {
head = money.substring(0,dotPos);
tail = money.substring(dotPos+1);
}
if (tail.length()==1)
 {
tail +="0";
}
sub.append(parseHead(head));
sub.append(parseTail(tail));
return sub.toString();
}

 static String parseHead(String head) {
System.out.println("head = ["+head+"]");
if (head.length()==0 || head.equals("0"))
 {
return "";
}
StringBuffer sub = new StringBuffer("");

if (head.length()==0)
 {
return head;
}
if (head.length()>units.length)
 {
throw new RuntimeException("String too long. supported max size: "+units.length+", actual size: "+head.length());
}
int uIndex = 0;//单位的起始索引
if (head.length()!=units.length)
 {
uIndex = units.length-head.length();
}
int zero = 0; //'0'标志
for (int i=0;i<head.length() ;i++ )
 {
int d = Integer.parseInt(String.valueOf(head.charAt(i)));
//处理'0'
if (d==0)
 {
int pos = head.length()-i;
switch (pos)
 {
case 13:
if (zero!=3) sub.append("兆");
if (zero!=0) zero=0;
break;
case 9:
if (zero!=3) sub.append("亿");
if (zero!=0) zero=0;
break;
case 5:
if (zero!=3) sub.append("万");
if (zero!=0) zero=0;
break;
default:
zero++;
}
if (i==head.length()-1)
 {
sub.append("元");
}
continue;
}
 if (zero>0) {
sub.append(digits[0]);
zero=0;
}
sub.append(digits[d]);
sub.append(units[uIndex+i]);
}
return sub.toString();
}

 static String parseTail(String tail) {
StringBuffer sub = new StringBuffer("");
if (tail==null)
 {
throw new RuntimeException("Unsupported argument null");
}
if (tail.length()==0 || tail.equals("00"))
 {
return "整";
}
int d = Character.digit(tail.charAt(0),10);
sub.append(digits[d]);
if (d!=0)
 {
sub.append("角");
}
sub.append(digits[Character.digit(tail.charAt(1),10)]).append("分");
return sub.toString();
}

public static void main(String[] args) throws IOException
 {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (true)
 {
System.out.print("\n输入: ");
String r=in.readLine();
if (r.equals("end"))
 {
break;
}
System.out.println("大写: "+display(r));
}
}
}
|