这个程序对于(¥1011)->(一千零一拾一元整)是没有问题的。
答案:
¥1011
壹仟零壹拾壹元整
但输入9位以下正整数,有些地方有瑕疵。望后来人帮我改进!!
import java.text.NumberFormat;
import java.util.HashMap;
import java.util.Locale;
public class SimpleMoneyFormat {
//(¥1011)->(一千零一拾一元整)输出。
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 = "玖";
private String [] MONEY1={"元整","拾","佰","仟"};
private String [] MONEY2={"亿","万","元整"};
public int money=1011;
private HashMap chineseNumberMap = new HashMap();
StringBuffer t3=new StringBuffer();
private NumberFormat numberFormat = NumberFormat.getInstance();
//当前语言环境的数字格式
SimpleMoneyFormat() {
numberFormat.setMaximumFractionDigits(4);
numberFormat.setMinimumFractionDigits(2);
numberFormat.setGroupingUsed(false);
this.chineseNumberMap.put("0", ZERO);
this.chineseNumberMap.put("1", ONE);
this.chineseNumberMap.put("2", TWO);
this.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);
this.addStringBuffer();
}
public String getString(int moneyStr) {
String result=numberFormat.getCurrencyInstance(Locale.CHINA).format(moneyStr);
return result;
}
public void addStringBuffer () {
StringBuffer sb=new StringBuffer();
String getStr=getString(money);
sb.append(getStr);
while(sb.indexOf(",")>0) { //去掉字符串中的逗号
sb=sb.deleteCharAt(sb.indexOf(","));
}
//小数点前
getStr=sb.substring(sb.indexOf("¥")+1,sb.indexOf("."));//¥(不包括)到结尾之间的数字串
System.out.println(sb.substring(sb.indexOf("¥"),sb.indexOf(".")));
translateChinese(getStr);
}
public void translateChinese (String str) {
StringBuffer t1=new StringBuffer();
String t4;
int h=0;
t1.append(str);
int length=t1.length();
while(length>0) {
if(8<length&&length<13) {//亿范围
t4=t1.substring(0, length-8);
int k=t4.length();
for(int j=k;j>0;j--) {
try {
String s=(String)chineseNumberMap.get(t4.substring(h,h+1));//一个字一个字的截取。
t3.append(s);
String moneY=MONEY1[j-1];
if(MONEY1[0]!=null) {
MONEY1[0]=MONEY2[0];
moneY=MONEY1[0];
}
t3.append(moneY);
h++;
}catch(Exception e) {
System.out.println(e.toString());
}
}
//删除亿范围
t1.delete(0, length-8);
length=t1.length();
h=0;
continue;
}else if(4<length&&length<9) {//万范围
t4=t1.substring(0, length-4);
int k=t4.length();
for(int j=k;j>0;j--) {
try {
String s=(String)chineseNumberMap.get(t4.substring(h,h+1));//一个字一个字的截取。
t3.append(s);
String moneYY=MONEY1[j-1];
if(MONEY1[0]!=null)
{
MONEY1[0]=MONEY2[1];
}
t3.append(moneYY);
h++;
}catch(Exception e) {
System.out.println(e.toString());
}
}
//删除仟范围
t1.delete(0, length-4);
length=t1.length();
h=0;
continue;
}else if(0<length&&length<5) { //元范围
t4=t1.substring(0, length);
int k=t4.length();
for(int j=k;j>0;j--) {
try {
String s=(String)chineseNumberMap.get(t4.substring(h,h+1));//一个字一个字的截取。
t3.append(s);
String moneY=MONEY1[j-1];
if(MONEY1[0]!=null)
{
MONEY1[0]=MONEY2[2];
}
t3.append(moneY);
h++;
}catch(Exception e) {
System.out.println(e.toString());
}
}
}
break;
}
}
public void handleStringBuffer3(StringBuffer stringbuffer3) {
StringBuffer sb3=stringbuffer3;
StringBuffer sb4=new StringBuffer();
// System.out.println(sb3.toString());
int i=sb3.indexOf("零");
String s4= sb3.substring(0, i+1);
sb3.delete(0,i+2);
sb4.append(s4);
while(sb3.length()>0) {
while(sb3.indexOf("零")==0) {//零后有零
sb3.delete(0, 2);
}
if(sb3.indexOf("零")>0) {
s4=sb4.substring(0,sb3.indexOf("零"));
sb4.append(s4);
sb3.delete(0, sb3.indexOf("零")+2);
continue;
}else{
sb4.append(sb3.toString());
System.out.println(sb4.toString());
break;
}
}
}
public static void main (String [] args) {
SimpleMoneyFormat smf=new SimpleMoneyFormat();
smf.handleStringBuffer3(smf.t3);
}
}