【正确答案】参考程序如下:
package test.format;
import java.text.NumberFormat;
import java.util.HashMap;
public class SimpleMoneyFormat{
public static final String EMPTY="";
public static final String ZERO="零";
public static final String ONE="壹";
public static final String TWO="贰";
public static final String THREE="叁";
public static final String FOUR="肆";
public static final String FIVE="伍";
public static final String SIX="陆";
public static final String SEVEN="柒";
public static final String EIGHT="捌";
public static final String NINE="玖";
public static final String TEN = "拾";
public static final String HUNDRED = "佰";
public static final String THOUSAND="仟";
public static final String TEN_THOUSAND = "万";
public static final String HUNDRED_MILLION = "亿";
public static final String YUAN = "元";
public static final String JIAO = "角";
public static final String FEN="分";
public static final String DOT = ". ";
private static SimpleMoneyFormat formatter = null;
private HashMap chineseNumberMap = new HashMap();
private HashMap chineseMoneyPattern : new HashMap();
private NumberFormat numberFormat = NumberFormat.getInstance();
private SimpleMoneyFormat(){
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setGroupingUsed(false);
chineseNumberMap.put("0", ZERO);
chineseNumberMap.put("1", ONE);
chineseNumberMap.put("2", TWO) ;
chineseNumberMap.put ("3", THREE) ;
chineseNumberMap.put("4", FOUR) ;
chineseNumberMap.put("5", FIVE) ;
chineseNumberMap.put("6", SIX) ;
chineseNumberMap.put ("7", SEVEN) ;
chineseNumberMap.put("8", EIGHT) ;
chineseNumberMap.put ("9", NINE) ;
chineseNumberMap.put(DOT, DOT);
chineseMoneyPattern.put ("1" TEN) ;
chineseMoneyPattern.put ("2" HUNDRED) ;
chineseMoneyPattern.put ("3" THOUSAND) ;
chineseMoneyPattern.put("4" TEN THOUSAND);
chineseMoneyPattern.put("5" TEN);
chineseMoneyPattern.put("6" HUNDRED);
chineseMoneyPattern.put("7" THOUSAND);
chineseMoneyPattern.put("8" HUNDRED MILLION)
}
public static SimpleMoneyFormat getInstance(){
if (formatter == null)
formatter = new SimpleMoneyFormat();
return formatter;
}
public String format(String moneyStr) {
checkPrecision(moneyStr);
String result;
result = convertToChineseNumber(moneyStr);
result = addUnitsToChineseMoneyString(result);
return result;
}
public String format(double moneyDouble) {
return format(numberFormat.format(moneyDouble));
}
public String format(int moneyInt) {
return format(numberFormat.format(moneyInt));
}
public String format(long moneyLong) {
return format(numberFormat.format(moneyLong));
}
public String format(Number moneyNum) {
return format(numberFormat.format(moneyNum));
}
private String convertToChineseNumber(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer();
for (int i = 0; i < moneyStr.length(); i++) {
cMoneyStringBuffer.append(chineseNumberMap.get(moneyStr.substring(i,+ i)));
}
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
int moneyPatternCursor = i;
for (int i = indexOfDot - 1; i > 0; i--) {
cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY+moneyPatternCursor));
moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + i;
}
String fractionPart = cMoneyStringBuffer.substring(cMoneyStringBuffer.indexOf("."));
cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf("."),cMoneyStringBuffer.length());
while (cMoneyStringBuffer.indexOf("零拾") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零拾"),
cMoneyStringBuffer.indexOf("零拾") + 2, ZERO);
while (cMoneyStringBuffer.indexOf("零佰") !=-1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零佰"),
cMoneyStringBuffer.indexOf "零佰") + 2, ZERO);
while (cMoneyStringBuffer.indexOf("零仟") !=-1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零仟"),
cMoneyStringBuffer.indexOf "零仟") + 2, ZERO);
while (cMoneyStringBuffer.indexOf("零万") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零万"),
cMoneyStringBuffer.indexOf ("零万") + 2, TEN THOUSAND);
while (cMoneyStringBuffer.indexOf("零亿") != -1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零亿"),
cMoneyStringBuffer.indexOf ("零亿") + 2, HUNDRED MILLION);
while (cMoneyStringBuffer.indexOf("零零") !=-1) {
cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf("零零"),
cMoneyStringBuffer.indexOf ("零零") + 2, ZERO);
}
if (cMoneyStringBuffer.lastIndexOf(ZERO) == cMoneyStringBuffer.length() - 1)
cMoneyStringBuffer.delete(cMoneyStringBuffer.length() - 1, cMoneyStringBuffer.
length());
cMoneyStringBuffer.append(fractionPart);
result = cMoneyStringBuffer.toString();
return result;
private String addUnitsToChineseMoneyString(String moneyStr) {
String result;
StringBuffer cMoneyStringBuffer = new StringBuffer(moneyStr);
int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
cMoneyStringBuffer.replace(indexOfDot, indexOfDot + 1, YUAN);
}
【答案解析】