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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.        键盘录入一个大于-1小于1000的正整数,将该整数转换成中文在控制台输出
2.        除非输入数字不在规定的范围,否则可以一直进行输入转换
小于10,数字后不需要带单位
                大于9小于100,数字后需要带单位”十”
                大于99小于1000,数字后需要带单位”百”
                数字转换成中文样式如下:
                5        五
                15       一十五
                115      一百一十五

3 个回复

倒序浏览
给个你参考下,差不多的
回复 使用道具 举报
  1. package cn.itcast.javatest;

  2. import java.math.BigDecimal;
  3. import java.util.Hashtable;
  4. import java.util.Map;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;

  7. /**
  8. * 将阿拉伯数字转换成汉语大写数字
  9. *
  10. * @author sitinspring
  11. * @date 2008-03-25
  12. */
  13. public class ChineseUpperCaser {
  14.         /**
  15.          * 用于存储整数部分
  16.          */
  17.         private String integerPart;

  18.         /**
  19.          * 用于存储小数部分
  20.          */
  21.         private String floatPart;

  22.         /**
  23.          * 用于存储0-9大写的哈希表
  24.          */
  25.         private static final Map<String, String> ZerotoNineHt;

  26.         /**
  27.          * 用于存储十百千大写的哈希表
  28.          */
  29.         private static final Map<Integer, String> thHuTenHt;

  30.         /**
  31.          * 用于存储万亿兆大写的哈希表
  32.          */
  33.         private static final Map<Integer, String> wanYiZhaoHt;

  34.         static {
  35.                 ZerotoNineHt = new Hashtable<String, String>();

  36.                 ZerotoNineHt.put("0", "零");
  37.                 ZerotoNineHt.put("1", "壹");
  38.                 ZerotoNineHt.put("2", "贰");
  39.                 ZerotoNineHt.put("3", "叁");
  40.                 ZerotoNineHt.put("4", "肆");
  41.                 ZerotoNineHt.put("5", "伍");
  42.                 ZerotoNineHt.put("6", "陆");
  43.                 ZerotoNineHt.put("7", "柒");
  44.                 ZerotoNineHt.put("8", "捌");
  45.                 ZerotoNineHt.put("9", "玖");

  46.                 thHuTenHt = new Hashtable<Integer, String>();
  47.                 thHuTenHt.put(0, "");
  48.                 thHuTenHt.put(1, "拾");
  49.                 thHuTenHt.put(2, "佰");
  50.                 thHuTenHt.put(3, "仟");

  51.                 wanYiZhaoHt = new Hashtable<Integer, String>();
  52.                 wanYiZhaoHt.put(0, "");
  53.                 wanYiZhaoHt.put(1, "万");
  54.                 wanYiZhaoHt.put(2, "亿");
  55.                 wanYiZhaoHt.put(3, "兆");
  56.         }

  57.         private static String getWanYiZhao(int level) {
  58.                 String retval = "";

  59.                 do {
  60.                         retval += wanYiZhaoHt.get(level % 4);
  61.                         level -= 3;
  62.                 } while (level > 3);

  63.                 return retval;
  64.         }

  65.         /**
  66.          * 构造函数
  67.          *
  68.          * @param number
  69.          * @throws NumberFormatException
  70.          */
  71.         public ChineseUpperCaser(float number) throws NumberFormatException {
  72.                 this(String.valueOf(number));
  73.         }

  74.         /**
  75.          * 构造函数
  76.          *
  77.          * @param number
  78.          * @throws NumberFormatException
  79.          */
  80.         public ChineseUpperCaser(double number) throws NumberFormatException {
  81.                 this(String.valueOf(number));
  82.         }

  83.         /**
  84.          * 构造函数
  85.          *
  86.          * @param number
  87.          * @throws NumberFormatException
  88.          */
  89.         public ChineseUpperCaser(int number) throws NumberFormatException {
  90.                 this(String.valueOf(number));
  91.         }

  92.         /**
  93.          * 构造函数
  94.          *
  95.          * @param number
  96.          * @throws NumberFormatException
  97.          */
  98.         public ChineseUpperCaser(long number) throws NumberFormatException {
  99.                 this(String.valueOf(number));
  100.         }

  101.         /**
  102.          * 构造函数
  103.          *
  104.          * @param number
  105.          * @throws NumberFormatException
  106.          */
  107.         public ChineseUpperCaser(String number) throws NumberFormatException {
  108.                 String formalNumber = formatNumber(number);

  109.                 // 辟分以给整数部分和小数部分赋值
  110.                 String[] arr = formalNumber.split("[.]");
  111.                 if (arr.length == 2) {
  112.                         // 有小数点
  113.                         integerPart = arr[0];
  114.                         floatPart = arr[1];
  115.                 } else {
  116.                         // 无小数点
  117.                         integerPart = arr[0];
  118.                 }
  119.         }

  120.         public String toString() {
  121.                 String retval = "";

  122.                 if (integerPart != null) {
  123.                         retval += parseIntegerPart();
  124.                 }

  125.                 if (floatPart != null) {
  126.                         retval += parseFloatPart();
  127.                 } else {
  128.                         retval += "整";
  129.                 }

  130.                 return retval;
  131.         }

  132.         /**
  133.          * 得到整数部分的汉字大写表示
  134.          *
  135.          * @return
  136.          */
  137.         private String parseIntegerPart() {
  138.                 String retval = "";

  139.                 // 将整数部分逆序,因为需要反向读取
  140.                 String reverseIntegerPart = "";

  141.                 for (int i = integerPart.length() - 1; i > -1; i--) {
  142.                         reverseIntegerPart += integerPart.charAt(i);
  143.                 }

  144.                 // 将整数部分按四位分段
  145.                 Pattern p = Pattern.compile("\\d{4}", Pattern.CASE_INSENSITIVE);

  146.                 Matcher m = p.matcher(reverseIntegerPart);
  147.                 StringBuffer sb = new StringBuffer();

  148.                 boolean result = m.find();
  149.                 while (result) {
  150.                         // 每找到四位放一个逗号
  151.                         m.appendReplacement(sb, m.group(0) + ",");
  152.                         result = m.find();
  153.                 }
  154.                 m.appendTail(sb);

  155.                 // 按逗号劈分,得到四位分组数据的数组
  156.                 String[] arr = sb.toString().split(",");

  157.                 int j;
  158.                 String str;
  159.                 for (int i = arr.length - 1; i >= 0; i--) {
  160.                         String temp = arr[i];

  161.                         // 阿拉伯数字转大写汉字加单位(千百十)
  162.                         for (j = temp.length() - 1; j >= 0; j--) {
  163.                                 str = String.valueOf(temp.charAt(j));
  164.                                 retval += ZerotoNineHt.get(str) + thHuTenHt.get(j);
  165.                         }

  166.                         retval = retval.replaceAll("(零)($)", "$2");// 零在末尾则去掉
  167.                         // 加单位(兆亿万)
  168.                         retval += getWanYiZhao(i);
  169.                 }

  170.                 // 零替换
  171.                 retval = retval.replaceAll("(零[仟佰拾])", "零");
  172.                 retval = retval.replaceAll("(零{2,})", "零");
  173.                 retval = retval.replaceAll("(零)($)", "$2");// 零在末尾则去掉

  174.                 return retval;
  175.         }

  176.         /**
  177.          * 得到小数部分的汉字大写表示
  178.          *
  179.          * @return
  180.          */
  181.         private String parseFloatPart() {
  182.                 String retval = "点";

  183.                 for (int i = 0; i < floatPart.length(); i++) {
  184.                         String temp = String.valueOf(floatPart.charAt(i));

  185.                         retval += ZerotoNineHt.get(temp);
  186.                 }

  187.                 return retval;
  188.         }

  189.         /**
  190.          * 对输入的字符串进行验证,如果不能转化为数字形式则抛出数字转化异常 ,注意这是一个运行时异常(非检查型异常),程序不用显式捕获
  191.          *
  192.          * @param number
  193.          * @throws NumberFormatException
  194.          */
  195.         private String formatNumber(String number) throws NumberFormatException {
  196.                 return (new BigDecimal(number)).toString();
  197.         }

  198.         public static void main(String[] args) {
  199.                 String[] arr = { "1.543524304302432", "12.432423432", "123.454235",
  200.                                 "1234", "12345", "123456", "1234567", "12345678", "123456789",
  201.                                 "1234567891", "12345678912", "123456789123", "1234567891234",
  202.                                 "12345678912345", "123456789123456", "1234567891234567",
  203.                                 "12345678912345678", "123456789123456789",
  204.                                 "123456789123456789123456089123456789123456789123450780", "0",
  205.                                 "00", "000", "0000", "01", "001", "0001", "00001", "10", "100",
  206.                                 "1000", "10000", "101", "1001", "10001", "100001", "1.23",
  207.                                 "21.234", "243400031.233234", "5400035.980", "543.6545" };
  208.                 // String[]
  209.                 // arr={"0","00","000","0000","01","001","0001","00001","10","100","1000","10000","101","1001","10001","100001"};
  210.                 // String[]
  211.                 // arr={"1.23","21.234","243400031.233234","5400035.980","543.6545"};
  212.                 for (String str : arr) {
  213.                         System.out.println("阿拉伯数字等于:" + str + " 大写汉字等于:"
  214.                                         + new ChineseUpperCaser(str));
  215.                 }
  216.         }
  217. }
复制代码
回复 使用道具 举报
cat73 黑马帝 2016-7-26 12:20:16
板凳
本帖最后由 cat73 于 2016-7-26 12:23 编辑

代码:
[Java] 纯文本查看 复制代码
    public static void main(final String[] args) {
        System.out.println(1234567890 + ": " + Main.i2s(1234567890));
        System.out.println(230009888 + ": " + Main.i2s(230009888));
        System.out.println(100000800 + ": " + Main.i2s(100000800));
    }

    public static String i2s(int num) {
        final String[] suffixs = { "", "万", "亿" };

        String result = "";

        int i = 0;
        while (num != 0) {
            result = Main.i2s(num % 10000, suffixs[i++]) + result;
            num /= 10000;
        }

        return result;
    }

    private static String i2s(int num, final String suffix) {
        if (num == 0) {
            return "";
        }

        final String[] nums = { "零", "一", "二", "三", "四", "五", "六", "七", "八", "九" };
        final String[] units = { "", "十", "百", "千" };

        String result = "";

        int i = 0;
        while (num != 0) {
            final int n = num % 10;

            if (n != 0) {
                result = units[i] + result;
                result = nums[n] + result;
            }

            num /= 10;
            i += 1;
        }

        return result + suffix;
    }

输出:
[Java] 纯文本查看 复制代码
1234567890: 一十二亿三千四百五十六万七千八百九十
230009888: 二亿三千万九千八百八十八
100000800: 一亿八百

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马