(¥1011)->(一千零一拾一元整)输出。(可输入9位以下正整数)

来源:互联网 发布:国立中山大学网络大学 编辑:程序博客网 时间:2024/04/29 22:10
 

这个程序对于(¥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);     
   }
}