天天看點

轉化十億以内的人民币數字為大寫格式

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class RMBUpper {

 private final String []dws=new String[]{"","拾","佰","仟","萬","拾萬","佰萬","仟萬","億","拾億","佰億","仟億"};

 private final String []szs=new String[]{"零","壹","貳","叁","肆","伍","陸","柒","捌","镹"};

 private String qs;

 private String result="";

 public static void main(String[] args) {

  BufferedReader in

     = new BufferedReader(new InputStreamReader(System.in));

  String r="0";

  do{

   System.out.println("請輸入要轉換為大寫的十億以内的正整數:");

   try {

    r=in.readLine();

    r=Integer.parseInt(r)+"";

   } catch (IOException e) {

    e.printStackTrace();

   }

  }

  while(!(Integer.parseInt(r)>0&&Integer.parseInt(r)<1000000000));

  RMBUpper rmb=new RMBUpper(r+"");

  System.out.println(rmb.getUpper());

 }

 public String getUpper() {

  // TODO 獲得輸入的大寫形式

  this.com();

  return this.result;

 }

 private void com() {

  // TODO 開始計算

  this.turnNumNotZero();

  this.deleteTooMuchZero();

  this.turnZero();

 }

 private void turnZero() {

  // TODO 将0轉換為零

  if(this.result.lastIndexOf("0")==this.result.length()-1){//處理最後是零的情況

   this.result=this.result.substring(0,this.result.length()-1);

  }

  this.result=this.result.replaceAll("0", this.szs[0]);

 }

 private void deleteTooMuchZero() {

  // TODO 删除多餘的零

  if(this.result.indexOf("00")==-1)return;

  this.result=this.result.replace("00", "0");

  this.deleteTooMuchZero();

 }

 private void turnNumNotZero() {

  // TODO 将非零數字轉換為大寫

  for(int i=0;i<this.qs.length();i++){

   int index=Integer.parseInt(this.qs.charAt(i)+"");

   if(index!=0){

    this.result+=this.szs[index]+this.dws[this.qs.length()-i-1];

   }else{

    this.result+="0";

   }

  }

 }

 public RMBUpper(String qs) {

  this.qs = qs;

 }

}