黑马程序员技术交流社区

标题: 金额转换,阿拉伯数字转换成中国传统形式。 * 例如:1010... [打印本页]

作者: 只为编程    时间: 2016-4-2 14:14
标题: 金额转换,阿拉伯数字转换成中国传统形式。 * 例如:1010...
要求各种情况都可以实现 如1000_0001_1010    1001_0101_1100   1010_0000_1010

作者: 菊花爆满山    时间: 2016-4-2 14:14
这是一道入学测试题吧   我当初写的你可以看看
  1. package com.itheima;

  2. import java.util.Scanner;

  3. /*
  4. *
  5. * */
  6. public class Test10 {
  7.         private static Scanner sc;
  8.         public static void main(String[] args) {
  9.                 sc = new Scanner(System.in);              //定义一个文本扫描器 用于接收标准输入流的数据
  10.                 String str = sc.nextLine();
  11.                
  12.                 if("".equals(str) || !str.matches("\\d+")) {
  13.                         throw new RuntimeException("字符串内容为空或含有非阿拉伯数字字符");         //若该数据为空或者含有非阿拉伯数字字符则抛出运行时异常
  14.                 }
  15.                
  16.                 System.out.println(changeNum(str).concat("圆整").replaceAll("零圆整", "圆整"));
  17.                 sc.close();
  18.         }
  19.         public static String changeNum(String str) {
  20.                
  21.                 String[] num = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};  //定义两个字符数组用于存储阿拉伯数字的汉字表现字符 和   单位表现字符
  22.                 String[] arr = {"拾","佰","仟"};
  23.                
  24.                 StringBuilder sb = new StringBuilder();
  25.                 if(str.length() < 5) {             //首先分析该数在万位以下
  26.                         for(int x = str.length()-1; x>=0; x--) {  //从个位数开始遍历
  27.                                 char ch = str.charAt(x);
  28.                                 int n = Integer.parseInt(ch+"");
  29.                                 if(n == 0 || x == str.length()-1) {     //判断该位数是否为零或者是否是个位
  30.                                         if(n == 0 && x == str.length()-1) {   //若是零且是个位   就不做任何处理
  31.                                                 ;
  32.                                         }else {
  33.                                                 sb.insert(0, num[n]);        //若是个位 但不是零     就将该数的汉字字符存储进字符串缓冲区
  34.                                         }
  35.                                 }else {
  36.                                         sb.insert(0, num[n]+arr[str.length() - x - 2]);   //若该位数不是零且不是个位   就将该数的汉字字符和单位存储进字符串缓冲区
  37.                                 }
  38.                         }
  39.                 }else if(str.length() < 9) {      //分析该数在亿位以下
  40.                         int k = str.length() - 4;
  41.                         String s1 = changeNum(str.substring(0, k));      //高位
  42.                         String s2 = changeNum(str.substring(k, str.length()));   //低位
  43.                         StringBuilder sb2 = new StringBuilder(s1);
  44.                         if(s1.endsWith("零")) {                      //若高位返回的字符串最后一个字符是零    就将零字符替换成萬字符
  45.                                 if(s1.length() != 1) {         //特殊情况   
  46.                                         sb2.setCharAt(s1.length() - 1, '萬');
  47.                                 }else {
  48.                                         ;                                                        //若高位全为零  那么不做任何处理
  49.                                 }
  50.                         }else{
  51.                                 sb2.insert(s1.length(), '萬');     //若高位返回的字符串最后一个字符不是零    就在字符串最后位置上加上萬字符
  52.                         }
  53.                         return sb2.toString() + s2;                                //最后返回字符串
  54.                 }else if(str.length() > 8) {        //再次分析该数在亿位及以上
  55.                         int k = str.length() - 8;
  56.                         String s1 = changeNum(str.substring(0, k));      //高位
  57.                         String s2 = changeNum(str.substring(k, str.length()));   //低位
  58.                         StringBuilder sb2 = new StringBuilder(s1);
  59.                         if(s1.endsWith("零")) {
  60.                                 sb2.setCharAt(s1.length() - 1, '亿');
  61.                         }else {
  62.                                 sb2.insert(s1.length(), '亿');
  63.                         }
  64.                         return sb2.toString() + s2;
  65.                 }
  66.                 return sb.toString().replaceAll("零+", "零");
  67.         }
  68. }
复制代码

作者: 只为编程    时间: 2016-4-2 14:16
要求有明确的注释
作者: ping3014    时间: 2016-4-2 17:55

day0402_shu.zip

6.23 KB, 阅读权限: 100, 下载次数: 0


作者: 122754304    时间: 2016-4-2 19:54
利用split方法可以实现
作者: doglovely    时间: 2016-4-3 17:58
都是神人呀!
作者: aweilovemusic    时间: 2016-4-3 18:46
都是大神啊,我目前只想到字符数组里面的替换功能
作者: LoveGG    时间: 2016-4-26 00:44
都是大神啊,厉害,我学过但是记不住代码了.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2