A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 执剑人 中级黑马   /  2016-3-7 11:17  /  2176 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

10、金额转换,阿拉伯数字转换成中国传统形式。

例如:101000001010   转换为   壹仟零壹拾亿零壹仟零壹拾圆整   
static String[] arr = {"亿","仟","佰","拾","万","仟","佰","拾","" };
        static String[] crr = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
        public static void main(String[] args) {
               
                long yuan = 1220000;
                String amount = String.valueOf(yuan);
                int len = amount.length();
        int unitsLen = arr.length;

        String cuch = "";
        for (int i = len - 1; i >= 0; i--) {
            cuch = number(amount.charAt(i)) + unit(amount.charAt(i), unitsLen - len + i) +cuch;
        }

        cuch = cuch.replaceAll("零+","零");
        cuch =  cuch + "元整";
        cuch = cuch.replaceAll("零万","万");
        cuch = cuch.replaceAll("零元","元");
        System.out.println(cuch);
        }
        private static String number(char number) {
        return crr[Integer.parseInt(String.valueOf(number))];
    }
         private static String unit(char number, int pos) {
                if(number == '0' && pos != arr.length - 5) {
                    return "";
                }
                return arr[pos];
       
}
这题考的是字符串的拼接!

6 个回复

倒序浏览
大兄弟,厉害
回复 使用道具 举报
大兄弟,不错啊
回复 使用道具 举报
发现bug不能输出一亿
回复 使用道具 举报
你这样写有BUG 看看我的代码 可以输入任何数
  1. package com.itheima;

  2. import java.util.Scanner;

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