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 + 1)));
??? }
??? //拾佰仟萬億等都是漢字里面才有的單位,加上它們
??? int indexOfDot = cMoneyStringBuffer.indexOf(DOT);
??? int moneyPatternCursor = 1;
??? for (int i = indexOfDot - 1; i > 0; i--) {
????? cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor));
????? moneyPatternCursor = moneyPatternCursor == 8 ? 1 : moneyPatternCursor + 1;
??? }
??? 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);
?
posted on 2007-01-13 13:57
JavaCoffe 閱讀(1468)
評(píng)論(4) 編輯 收藏