昨天面试的一道编程题 将人民币大写转换成数字,并且保证数据不能超过一亿

昨天面试的一道题,当时我是把答案写在纸上,也没有用IDE调
今天再写一遍,测试通过,这样也证明了我的思路是正确的。

下面这段代码还可以写得更优美点,比如用静态方法等。

 

/**
 * 将人民币大写转换成数字,并且保证数据不能超过一亿
 * @author joeho
 *
 */
public class RMBFormatOutPut {
 /**
  * 测试输入
  * @param args
  */
 public static void main(String[] args) {
  RMBFormatOutPut sp = new RMBFormatOutPut();
  /* 
  String strInput="";
  try {
   InputStream in=new BufferedInputStream(System.in);
   strInput = String.valueOf(in.read());
  } catch (IOException e) {
   e.printStackTrace();
  }
  System.out.println(sp.getFormatInput(sp.getInputString(strInput)));
  */
  //System.out.println(sp.getFormatInput(sp.getInputString("壹仟貳佰叁拾肆萬伍仟伍佰陸拾柒捌玖")));
  int result = sp.getFormatInput(sp.getInputString("壹仟貳佰叁拾肆萬伍仟伍佰陸拾柒"));
  if(result==0){
   System.out.println("您输入的金额大于一亿,请重新输入");
  }else if(result==1){
   System.out.println("您输入的金额格式不对,请重新输入");
  }else{
   System.out.println("转换后的金额为"+result);
  }
 }
 //定义静态常量,用于保存1~9的数字
 private static final String ONE = "壹";
 private static final String TWO ="貳";
 private static final String THREE="叁";
 private static final String FOUR="肆";
 private static final String FIVE="伍";
 private static final String SIX ="陸";
 private static final String SEVEN="柒";
 private static final String EIGHT="捌";
 private static final String NINE="玖";
 
 //定义静态常量,用于保存人民币单位
 private static final String YI="亿"; 
 private static final String WANG ="萬";
 private static final String QIAN ="仟";
 private static final String BAI ="佰";
 private static final String SHI ="拾";
 
 /**
  * 接收用户输入,并将输入的汉字截取出来放入一个字符串数组
  * 该数组用来遍历每一个汉字并用于后面的数字转换
  * @param str
  * @return String[]
  */
 public String[] getInputString(String str){
  String[] splitStr = new String[str.length()];
  for(int j=0;j<str.length();j++){
   splitStr[j]=String.valueOf(str.charAt(j));
  }
  return splitStr;
 }
 /**
  * 将字符串数组进行遍历,并进行格式转换
  * @param splitStr
  * @return
  */
 public int getFormatInput(String[] splitStr){
  //用于接收数组中的每个元素
  String strTemp="";
  //用于保存数组的前一个元素,这样可以知道是单位还是数据
  String preData="";
  //用于格式转换后的返回值
  int countData =0;
  //对应单位数据统计
  int shiCount = 0,baiCount=0,qianCount=0,wangCount=0;
  
  for(int i=0;i<splitStr.length;i++){
   strTemp=splitStr[i];
   if(ONE.equals(strTemp)){ 
    strTemp=strTemp.replace(splitStr[i], "1");
   } 
   else if(TWO.equals(strTemp)){    
    strTemp=strTemp.replace(splitStr[i], "2");
   }
   else if(THREE.equals(strTemp)){    
    strTemp=strTemp.replace(splitStr[i], "3");
   }
   else if(FOUR.equals(strTemp)){   
    strTemp=strTemp.replace(splitStr[i], "4");
   }
   else if(FIVE.equals(strTemp)){  
    strTemp=strTemp.replace(splitStr[i], "5");
   }
   else if(SIX.equals(strTemp)){   
    strTemp=strTemp.replace(splitStr[i], "6");
   }
   else if(SEVEN.equals(strTemp)){    
    strTemp=strTemp.replace(splitStr[i], "7");
   }
   else if(EIGHT.equals(strTemp)){    
    strTemp=strTemp.replace(splitStr[i], "8");
   }
   else if(NINE.equals(strTemp)){    
    strTemp=strTemp.replace(splitStr[i], "9");
   }
  
   else if(WANG.equals(strTemp)){
    if(!"".equals(preData)){
     preData=String.valueOf(Integer.valueOf(preData)+qianCount+baiCount+shiCount);
     wangCount=Integer.valueOf(preData)*10000;  
    } 
   }  
   else if(QIAN.equals(strTemp)){
    if(!"".equals(preData)){   
     qianCount=Integer.valueOf(preData)*1000;  
    } 
   }   
   else if(BAI.equals(strTemp)){
    if(!"".equals(preData)){
     baiCount=Integer.valueOf(preData)*100;
   
    }   
   }
   else if(SHI.equals(strTemp)){
    if(!"".equals(preData)){
     shiCount=Integer.valueOf(preData)*10;    
    }  
   } 
   else if(YI.equals(strTemp)){
    //碰到亿这个单位直接返回0,保证输入的数据不大于一亿
    return 0;
   }   
   preData=strTemp;    
  } 
  countData=wangCount+qianCount+baiCount+shiCount+Integer.valueOf(strTemp); 
  return countData;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值