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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

5 个回复

倒序浏览
我也想过这个题,就是不知道零要怎么放,有的时候要加零有的时候也不用加,有点烦躁
回复 使用道具 举报
/*金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾圆整  * 耗时:  * 状态:  *  思路分析:  *    1.首先获取他的长度  *    2.获取他的单位  *    3.凡是出现两个相零出现多个零的全部用一个零去代替  *   必须在转变为大写之前添加单位进去.  *   这个题,挺难的.  * */ public class Demo05 {         public static void main(String[] args) {                 String[] str1 = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };                 //Map<Long, String> map = new TreeMap<Long, String>();                 String[] arr2 = { "", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百",                                 "千" };// 这个只能做为值                 //map.put(1L, "");                 long k = 1;                 /*for (int i = 1; i < 12; i++) {                         k *= 10;                         map.put(k, arr2[i]);                 }*/                 String str2 = "1253";                 String str = "";                 char[] arr = str2.toCharArray();                 for (int i = 0; i < arr.length; i++) {// arr[i]='1'                         Integer in = Integer.parseInt(arr[i] + "");                         str += str1[in];                 }                 // System.out.println(str);                 // 从后面往前查入单位 ""                 String str3 = "";                 int x = 0;                 for (int i = str.length() - 1; i >= 0; i--) {                         str3 += arr2[x] + str.charAt(i);                         x++;                 }                 // 开始反转                 str = "";                 for (int i = str3.length() - 1; i >= 0; i--) {                         str += str3.charAt(i);                 }                 /*                  * 首先判断相邻的的i-1和 i+1是不是为零, 如果是去就掉i-1 i i+1和i+2 其次遇到零就去掉后面的单位,                  * 方式二,遇到零就去掉后面的单位 再次判断,如果是多个零的情况就把多个零替换为一个零.                  */                 str3 = "";                 String regex = "亿万";                 for (int i = 0; i < str.length() - 1; i++) {                         if (str.charAt(i) == '零' && !regex.contains(str.charAt(i + 1) + "")) {                                 str3 += str.charAt(i);                                 i++;                                 continue;                         } else {                                 str3 += str.charAt(i);                         }                 }                 str3 += str.charAt(str.length() - 1);                 /*                  * 开始去零 用正则去零                  */                 str = "零+";                 str3 = str3.replaceAll(str, "零");                 /*                  * 最后去掉万和亿前面的零                  */                 str = "";                 if (str3.contains("万") && str3.contains("亿")) {                         int b = str3.indexOf("万");                         if (str3.charAt(b - 1) == '零') {                                 str = str3.substring(0, b - 1) + str3.substring(b);                                 int c = str.indexOf("亿");                                 if (str.charAt(c - 1) == '零') {                                         str = str.substring(0, c - 1) + str.substring(c);                                         int z = str.indexOf("万");                                         if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万和亿挨着一起的情况下                                                 str = str.substring(0, z) + str.substring(z + 1);                                                 if (str.charAt(str.length() - 1) == '零') {                                                         str = str.substring(0, str.length() - 1);                                                         System.out.println("dddddddddddddd");                                                         System.out.println(str + "圆整");// 通过                                                 } else {// 如果最后一位不是零                                                         System.out.println("eeeeeeeeeeeeeeeeeeeeeee");                                                         System.out.println(str + "圆整");// 通过                                                 }                                         } else {// 如果亿和万不是挨着一起的                                                 if (str.charAt(str.length() - 1) == '零') {                                                         str = str.substring(0, str.length() - 1);                                                         System.out.println("kkkkkkkkkkkkkkkkk");//一千亿零一百万零一百圆整                             str=str.replaceAll("零", "");                                                         System.out.println(str + "圆整");// 通过                                                 } else {// 如果最后一位不是零                                                         System.out.println("mmmmmmmmmmmmmmmmmmmmmmm");                                                         System.out.println(str + "圆整");// 通过                                                 }                                         }                                 } else {// 如果亿前面不等于零                                         int z = str.indexOf("万");                                         if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万和亿挨着一起的情况下                                                 str = str.substring(0, z) + str.substring(z + 1);                                                 if (str.charAt(str.length() - 1) == '零') {                                                         str = str.substring(0, str.length() - 1);                                                         System.out.println("gggggggggggggggggggggg");                                                         System.out.println(str + "圆整");// 通过                                                 } else {// 如果最后一位不是零                                                         System.out.println("hhhhhhhhhhhhhhhhhhhhhhhhhhh");                                                         System.out.println(str + "圆整");// 通过                                                 }                                         } else {// 如果亿和万不是挨着一起的                                                 System.out.println("jjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");                                                 System.out.println(str + "圆整");// 通过                                         }                                                                          }                         } else {// 如果万前面不等于零                                 str = str3.substring(0, b - 1) + str3.substring(b);                                 int c = str.indexOf("亿");                                 if (str.charAt(c - 1) == '零') {                                         str = str.substring(0, c - 1) + str.substring(c);                                         int z = str.indexOf("万");                                         if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万前面是亿,并且万不是最后一个                                                 str = str.substring(0, z) + str.substring(z + 1);                                                 if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零                                                         str = str.substring(0, str.length() - 1);                                                         System.out.println(str + "圆整");// 通过                                                 } else {// 如果最后一位不是零                                                         System.out.println("11111111111111111111");                                                         System.out.println(str + "圆整");// 通过                                                 }                                         } else {// 如果亿和万不是挨着一起的 万是是最后一个和万不是最后一个,两种情况                                                 if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零                                                         str = str.substring(0, str.length() - 1);                                                         str=str.replaceAll("零", "");                                                         if(str.indexOf("万")-1==str.indexOf("亿")){                                                                 str=str.substring(0,str.indexOf("万"))+str.substring(str.indexOf("万")+1);                                                                 System.out.println("nnnnnnnnnnnnnn");////一百亿零万一千一百圆整                                                                 System.out.println(str + "圆整");// 通过                                                         }else{                                                                 System.out.println("qqqqqqqqqqqq");                                                         System.out.println(str + "圆整");// 通过                                                         }                                                 } else {// 如果最后一位不是零                                                         System.out.println("222222222222222222");                                                                                                                  System.out.println(str + "圆整");// 通过                                                 }                                         }                                 } else {// 如果亿前面不等于零 这个位置要判断是不是最后一位等于零的情况                                         int z = str.indexOf("万");                                         if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万前面是亿,并且万不是最后一个                                                 str = str.substring(0, z) + str.substring(z + 1);                                                 if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零                                                         str = str.substring(0, str.length() - 1);                                                         System.out.println(str + "圆整");// 通过                                                 } else {// 如果最后一位不是零                                                         System.out.println("3333333");                                                         System.out.println(str + "圆整");// 通过                                                 }                                         } else {// 如果亿和万不是挨着一起的 万是是最后一个和万不是最后一个,两种情况                                                 if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零                                                         str = str.substring(0, str.length() - 1);                                                         System.out.println("55555555555555555555");                                                         System.out.println(str + "圆整");// 通过                                                 } else {// 如果最后一位不是零                                                         System.out.println("444444444444444444");                                                         System.out.println(str + "圆整");// 通过                                                 }                                         }                                  }                          }                 } else if (str3.contains("万") && !str3.contains("亿")) {// 如果包含万,不包含亿                         int b = str3.indexOf("万");                         if (str3.charAt(b - 1) == '零') {// 如果万前面是零                                 str = str3.substring(0, b - 1) + str3.substring(b);                                 if (str.charAt(str.length() - 1) == '零') {// 如果最后一个数等于零                                         str = str.substring(0, str.length() - 1);                                         System.out.println("aaaaaaaaaaaaaaaa");                                         System.out.println(str + "圆整");// 通过                                 } else {                                         System.out.println("666666666666666666666666");                                         System.out.println(str + "圆整");// 通过                                 }                          } else {// 这里要做判断,是不是最后一位等于零 这里到了1万                                 /*                                  * if (str3.charAt(str3.length() - 1) == '零') { str3 =                                  * str3.substring(0, str3.length() - 1); }                                  * System.out.println("7777777777777777777777777");                                  * System.out.println(str3+"圆整");//通过 }                                  *                                   *                                   * System.out.println("8888888888888888888888");                                  * System.out.println(str+"圆整");//通过                                  */if (str3.charAt(str3.length() - 1) == '零') {// 如果最后一个数等于零                                         str = str3.substring(0, str3.length() - 1);                                         System.out.println("bbbbbbbbb");                                         System.out.println(str + "圆整");// 通过                                 } else {                                         System.out.println("cccccccccccccccccc");//------------------------------                                         System.out.println(str3 + "圆整");// 通过                                 }                          }                 } else if (str3.contains("亿") && !str3.contains("万")) {                         int b = str3.indexOf("亿");                         if (str3.charAt(b - 1) == '零') {                                 str = str3.substring(0, b - 1) + str3.substring(b);                          }                         if (str.charAt(str.length() - 1) == '零') {                                 str = str.substring(0, str.length() - 1);                         }                         System.out.println("999999999999999999999999");                         System.out.println(str + "圆整");// 通过                 } else {                         System.out.println("1010101010");                         if (str3.charAt(str3.length() - 1) == '零') {                                 str3 = str3.substring(0, str3.length() - 1);                         }                         System.out.println(str3 + "圆整");// 通过                 }                  // System.out.println(str);          } }
回复 使用道具 举报
/*金额转换,阿拉伯数字转换成中国传统形式。例如:101000001010 转换为壹仟零壹拾亿零壹仟零壹拾圆整
* 耗时:
* 状态:
*  思路分析:
*    1.首先获取他的长度
*    2.获取他的单位
*    3.凡是出现两个相零出现多个零的全部用一个零去代替
*   必须在转变为大写之前添加单位进去.
*   这个题,挺难的.
* */
public class Demo05 {
        public static void main(String[] args) {
                String[] str1 = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
                //Map<Long, String> map = new TreeMap<Long, String>();
                String[] arr2 = { "", "十", "百", "千", "万", "十", "百", "千", "亿", "十", "百",
                                "千" };// 这个只能做为值
                //map.put(1L, "");
                long k = 1;
                /*for (int i = 1; i < 12; i++) {
                        k *= 10;
                        map.put(k, arr2[i]);
                }*/
                String str2 = "1253";
                String str = "";
                char[] arr = str2.toCharArray();
                for (int i = 0; i < arr.length; i++) {// arr[i]='1'
                        Integer in = Integer.parseInt(arr[i] + "");
                        str += str1[in];
                }
                // System.out.println(str);
                // 从后面往前查入单位 ""
                String str3 = "";
                int x = 0;
                for (int i = str.length() - 1; i >= 0; i--) {
                        str3 += arr2[x] + str.charAt(i);
                        x++;
                }
                // 开始反转
                str = "";
                for (int i = str3.length() - 1; i >= 0; i--) {
                        str += str3.charAt(i);
                }
                /*
                 * 首先判断相邻的的i-1和 i+1是不是为零, 如果是去就掉i-1 i i+1和i+2 其次遇到零就去掉后面的单位,
                 * 方式二,遇到零就去掉后面的单位 再次判断,如果是多个零的情况就把多个零替换为一个零.
                 */
                str3 = "";
                String regex = "亿万";
                for (int i = 0; i < str.length() - 1; i++) {
                        if (str.charAt(i) == '零' && !regex.contains(str.charAt(i + 1) + "")) {
                                str3 += str.charAt(i);
                                i++;
                                continue;
                        } else {
                                str3 += str.charAt(i);
                        }
                }
                str3 += str.charAt(str.length() - 1);
                /*
                 * 开始去零 用正则去零
                 */
                str = "零+";
                str3 = str3.replaceAll(str, "零");
                /*
                 * 最后去掉万和亿前面的零
                 */
                str = "";
                if (str3.contains("万") && str3.contains("亿")) {
                        int b = str3.indexOf("万");
                        if (str3.charAt(b - 1) == '零') {
                                str = str3.substring(0, b - 1) + str3.substring(b);
                                int c = str.indexOf("亿");
                                if (str.charAt(c - 1) == '零') {
                                        str = str.substring(0, c - 1) + str.substring(c);
                                        int z = str.indexOf("万");
                                        if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万和亿挨着一起的情况下
                                                str = str.substring(0, z) + str.substring(z + 1);
                                                if (str.charAt(str.length() - 1) == '零') {
                                                        str = str.substring(0, str.length() - 1);
                                                        System.out.println("dddddddddddddd");
                                                        System.out.println(str + "圆整");// 通过
                                                } else {// 如果最后一位不是零
                                                        System.out.println("eeeeeeeeeeeeeeeeeeeeeee");
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        } else {// 如果亿和万不是挨着一起的
                                                if (str.charAt(str.length() - 1) == '零') {
                                                        str = str.substring(0, str.length() - 1);
                                                        System.out.println("kkkkkkkkkkkkkkkkk");//一千亿零一百万零一百圆整
                            str=str.replaceAll("零", "");
                                                        System.out.println(str + "圆整");// 通过
                                                } else {// 如果最后一位不是零
                                                        System.out.println("mmmmmmmmmmmmmmmmmmmmmmm");
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        }
                                } else {// 如果亿前面不等于零
                                        int z = str.indexOf("万");
                                        if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万和亿挨着一起的情况下
                                                str = str.substring(0, z) + str.substring(z + 1);
                                                if (str.charAt(str.length() - 1) == '零') {
                                                        str = str.substring(0, str.length() - 1);
                                                        System.out.println("gggggggggggggggggggggg");
                                                        System.out.println(str + "圆整");// 通过
                                                } else {// 如果最后一位不是零
                                                        System.out.println("hhhhhhhhhhhhhhhhhhhhhhhhhhh");
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        } else {// 如果亿和万不是挨着一起的
                                                System.out.println("jjjjjjjjjjjjjjjjjjjjjjjjjjjjjj");
                                                System.out.println(str + "圆整");// 通过
                                        }
                                       
                                }
                        } else {// 如果万前面不等于零
                                str = str3.substring(0, b - 1) + str3.substring(b);
                                int c = str.indexOf("亿");
                                if (str.charAt(c - 1) == '零') {
                                        str = str.substring(0, c - 1) + str.substring(c);
                                        int z = str.indexOf("万");
                                        if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万前面是亿,并且万不是最后一个
                                                str = str.substring(0, z) + str.substring(z + 1);
                                                if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零
                                                        str = str.substring(0, str.length() - 1);
                                                        System.out.println(str + "圆整");// 通过
                                                } else {// 如果最后一位不是零
                                                        System.out.println("11111111111111111111");
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        } else {// 如果亿和万不是挨着一起的 万是是最后一个和万不是最后一个,两种情况
                                                if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零
                                                        str = str.substring(0, str.length() - 1);
                                                        str=str.replaceAll("零", "");
                                                        if(str.indexOf("万")-1==str.indexOf("亿")){
                                                                str=str.substring(0,str.indexOf("万"))+str.substring(str.indexOf("万")+1);
                                                                System.out.println("nnnnnnnnnnnnnn");////一百亿零万一千一百圆整
                                                                System.out.println(str + "圆整");// 通过
                                                        }else{
                                                                System.out.println("qqqqqqqqqqqq");
                                                        System.out.println(str + "圆整");// 通过
                                                        }
                                                } else {// 如果最后一位不是零
                                                        System.out.println("222222222222222222");
                                                       
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        }
                                } else {// 如果亿前面不等于零 这个位置要判断是不是最后一位等于零的情况
                                        int z = str.indexOf("万");
                                        if (str.charAt(z - 1) == '亿' && z - 1 != str.length() - 1) {// 如果万前面是亿,并且万不是最后一个
                                                str = str.substring(0, z) + str.substring(z + 1);
                                                if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零
                                                        str = str.substring(0, str.length() - 1);
                                                        System.out.println(str + "圆整");// 通过
                                                } else {// 如果最后一位不是零
                                                        System.out.println("3333333");
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        } else {// 如果亿和万不是挨着一起的 万是是最后一个和万不是最后一个,两种情况
                                                if (str.charAt(str.length() - 1) == '零') {// 如果最后一位等于零
                                                        str = str.substring(0, str.length() - 1);
                                                        System.out.println("55555555555555555555");
                                                        System.out.println(str + "圆整");// 通过
                                                } else {// 如果最后一位不是零
                                                        System.out.println("444444444444444444");
                                                        System.out.println(str + "圆整");// 通过
                                                }
                                        }

                                }

                        }
                } else if (str3.contains("万") && !str3.contains("亿")) {// 如果包含万,不包含亿
                        int b = str3.indexOf("万");
                        if (str3.charAt(b - 1) == '零') {// 如果万前面是零
                                str = str3.substring(0, b - 1) + str3.substring(b);
                                if (str.charAt(str.length() - 1) == '零') {// 如果最后一个数等于零
                                        str = str.substring(0, str.length() - 1);
                                        System.out.println("aaaaaaaaaaaaaaaa");
                                        System.out.println(str + "圆整");// 通过
                                } else {
                                        System.out.println("666666666666666666666666");
                                        System.out.println(str + "圆整");// 通过
                                }

                        } else {// 这里要做判断,是不是最后一位等于零 这里到了1万
                                /*
                                 * if (str3.charAt(str3.length() - 1) == '零') { str3 =
                                 * str3.substring(0, str3.length() - 1); }
                                 * System.out.println("7777777777777777777777777");
                                 * System.out.println(str3+"圆整");//通过 }
                                 *
                                 *
                                 * System.out.println("8888888888888888888888");
                                 * System.out.println(str+"圆整");//通过
                                 */if (str3.charAt(str3.length() - 1) == '零') {// 如果最后一个数等于零
                                        str = str3.substring(0, str3.length() - 1);
                                        System.out.println("bbbbbbbbb");
                                        System.out.println(str + "圆整");// 通过
                                } else {
                                        System.out.println("cccccccccccccccccc");//------------------------------
                                        System.out.println(str3 + "圆整");// 通过
                                }

                        }
                } else if (str3.contains("亿") && !str3.contains("万")) {
                        int b = str3.indexOf("亿");
                        if (str3.charAt(b - 1) == '零') {
                                str = str3.substring(0, b - 1) + str3.substring(b);

                        }
                        if (str.charAt(str.length() - 1) == '零') {
                                str = str.substring(0, str.length() - 1);
                        }
                        System.out.println("999999999999999999999999");
                        System.out.println(str + "圆整");// 通过
                } else {
                        System.out.println("1010101010");
                        if (str3.charAt(str3.length() - 1) == '零') {
                                str3 = str3.substring(0, str3.length() - 1);
                        }
                        System.out.println(str3 + "圆整");// 通过
                }

                // System.out.println(str);

        }
}
回复 使用道具 举报
这个代码随便试,都没啥问题,花了一上午没事干,做出来,给点黑马币吧
还有一个更简单的方法10行代码搞定,  所以思路很重要,如果思路方式不对,事半工倍!!! 这个题就是一个例子,头都快被绕晕了
回复 使用道具 举报
这有个例子。你可以参考下。有三个方法。1是最简单的,没啥实用性。2和3倒是差不多
链接如下http://blog.sina.com.cn/s/blog_7cd69a65010151yj.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马