黑马程序员----final,throw等



 ------- android培训java培训、期待与您交流! ----------



/**
 * 
 * 金额转换,阿拉伯数字转换成中国传统形式。
  例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整
*/


/**
 * 思路:
 * 1.将金额数字分级,从个位开始4位为作为一级,因为每增加四位等级单位就会变化:万亿兆
 * 2.判断金额是否包含小数部分。
 * 3.将整数和小数部分分开转换
 * 4.取出每一级进行转换。
 * 5.将各级转换结果拼接得到最后结果,并打印查看转换结果
 * 
 *
 */
public class Test {
//数字大写
private static final String UPPERNUM = "零壹贰叁肆伍陆柒捌玖";
//单位
private static final String UNIT = "个拾佰仟";
//等级单位
private static final String GRADEUNIT = "万亿兆";
//每一级的长度
private static final int    GRADE = 4;
//零钱单位
private static final String DECIMAL = "角分";

/**
* 获取输入的金额
* @return
* @throws Exception
*/
public static String getInputMoney() throws Exception{
BufferedReader bufferIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入要转换的数字金额(如有小数点,小数点后保留两位),按回车结束:");
//去除输入金额两边的空格
String money = bufferIn.readLine().trim();
return money;
}
/**
* 将数字金额转换成大写
* @param money 数字金额
* @return 返回转换结果
*/
private static String toBigMoney(String money){
 //整则表达式,输入金额包含0-9的数字不超过16位,没有或有小数,如果有小数点后保留两位
 String regex = "^([0-9]\\d{0,15})(\\.\\d\\d)?$";
 //进行匹配操作
 if(!money.matches(regex))
throw new RuntimeException("输入非法值,长度要小于16,小数点后要保留两位!");
 String intPart = "";//整数位
 String dotPart = "";//小数位
 int dotPos;//小数点位置
 if((dotPos = money.indexOf(".")) != -1){//存在小数点
  intPart = money.substring(0, dotPos);//提取整数部分
  dotPart = money.substring(dotPos+1);//提取小数部分
 }else{//不存在小数点
  intPart = money;
 }

 String intStr = intToBig(intPart);//转化整数部分为大写
 String dotStr = dotToBig(dotPart);//转化小数部分为大写
 if(intStr.length() == 0 && dotStr.length() == 0){
  return "零圆";
 }else if(intStr.length() != 0 && dotStr.length() == 0){
  return intStr + "圆整";
 }else if(intStr.length() != 0 && dotStr.length() != 0){
  return intStr + "圆" + dotStr;
 }else{
  return dotStr;
 }
}
/**
* 将整数部分转化为大写
* @param intPart 整数部分
* @return 返回整数部分的大写结果
*/
private static String intToBig(String intPart) {
 int grade = intPart.length()/GRADE;//获取级长
 String strTmp = "";//获取某级字符串
 String result = "";//获取转化为大写的结果
 if(intPart.length() % GRADE != 0){
  grade = grade + 1;
 }
 //对每级数字处理,先处理最高级,然后再处理低级的
 for(int i = grade;i > 0;i--){
  strTmp = getNowGradeStr(intPart,i);//获取某级金额数值字符串
  result += changeToSub(strTmp);//转化为大写
  result = delZero(result);//去除连续的零
  if(i > 1){
   if(changeToSub(strTmp).equals("零零零零")){
    result = result + "零";
   }else{
   //添加GRADEUNIT单位
    result += GRADEUNIT.substring(i-2, i-1);
   }
  }
 }
 return result;
}
 
/**
* 获取某级金额数值字符串
* 整数部分从个位开始4位分为一级
* @param intPart 整数部分
* @param grade 级数
* @return 返回分级后的子串
*/
private static String getNowGradeStr(String intPart, int grade) {
 String rsStr = "";
 /*由高位向低位取子串*/
 //第一次取最高位子串
 if(intPart.length() <= grade*GRADE){
  rsStr = intPart.substring(0, intPart.length() - (grade-1)*GRADE);
  //System.out.println("if"+rsStr);
 }else{//如果整数部分字符串长度大于4按从高位到低位顺序取子串
  rsStr = intPart.substring(intPart.length() - grade*GRADE, intPart.length() - (grade-1)*GRADE);
 // System.out.println("else"+rsStr);
 }
// System.out.println(rsStr + "  " + grade);
 return rsStr;
}
 
/**
* 去除连续的零
* @param result 需要去除连续零的字符串
* @return 返回处理结果
*/
private static String delZero(String result) {
 //前一个子串
 String strBefore = "";
 //当前子串
 String strNow = "";
 //存储处理结果的字符串,初始化为包含result字符串第一个字符的子串
 String strResult= result.substring(0, 1);
 //将这个子串作为被比较的前一个子串
 strBefore = strResult;
 
 /*循环并进行去除连续零操作*/
 for(int i = 1;i < result.length();i++){
  //当前获取的子串
  strNow = result.substring(i, i+1);
  //如果前一个子串是零,当前子串也是零,不做任何动作
  if(strBefore.equals("零") && strNow.equals("零")){
   ;
  }else{//否则,将当前子与strResult字符串拼接
   strResult += strNow;
  }
  //将当前子串作为下一次比较的字符串
  strBefore = strNow;
 }
 //如果最后一个字符是零,则删除它
 if(strResult.substring(strResult.length()-1, strResult.length()).equals("零")){
  strResult = strResult.substring(0, strResult.length()-1);
 }
 //System.out.println(strResult+"g");
 return strResult;
}


/**
 * 获取转化后的大写结果
 * @param strTmp 需要被转换的某一级字符串
 * @return 返回转换结果
 */
private static String changeToSub(String strTmp) {
 //将转换结果存储到result字符串中
 String result = "";
 
 //需要被转换的字符串长度
 int strLength = strTmp.length();
 
 //开始转换
 for(int i = 0; i < strLength;i++){
  //将字符数字转换为整形
  int num =  Integer.parseInt(String.valueOf(strTmp.charAt(i)));
  if(num == 0){//如果为0,转换为“零”
   result += "零";
  }else{  
//将相应的大写数字存入字符串result
   result += UPPERNUM.substring(num, num+1);
   //在每个大写字母后面添加UNIT单位,按照从高位到低位顺序,不包括个位
   if(i != strLength-1){
    result += UNIT.substring(strLength-1-i, strLength-i);
   }
  }
 }
 //System.out.println(result+"g");
 return result;
}
//将小数部分转化为大写
private static String dotToBig(String dotPart) {
 //存储小数部分大写数字的字符串
 String dotStr = "";
 
 //开是转换
 for(int i = 0;i < dotPart.length();i++){
  int num = Integer.parseInt(dotPart.substring(i, i+1));
  //如果小数部分不是零添加单位,否则不处理。
  if(num != 0){
   dotStr += UPPERNUM.substring(num, num+1) + DECIMAL.substring(dotPart.length()-2+i, dotPart.length()+i-1);
  }
 }
 return dotStr;
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
//获取键盘输入金额
String money = getInputMoney();

//对金额进行转换
String result = toBigMoney(money);

//打印转换结果
System.out.println(result);
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值