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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 钟林杰 中级黑马   /  2013-4-12 15:29  /  1679 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 钟林杰 于 2013-4-12 15:49 编辑

今天我们一起来做一道java全国高等教育自学考试的程序设计题。
老规矩不能看别人的,得自己写,用自己的思路,因为这些都是很简单的题目。
让我们一起来对比一下我们的代码谁的更简洁更有效率更节省内存资源吧。

题目:请编写方法int countNum(String str),该方法的功能是统计已知字符串str中数字的个数。
          例如:int countNum(“ad3j56k7”)的返回值是4.
要求定义字符串为: "Abc1k2k43k44j565jk35j8j0d9h87g6d5a4s3add21",返回值是22;
(要回答了才能查看我的答案哦!)
public static int countNum(String str)                               //定义countNum()方法
        {
               
                char ch[] = str.toCharArray();                                                //将字符串转换为字符数组。
                char numTable[] ={'0','1','2','3','4','5','6','7','8','9'};                    //定义一个数字表
                int count = 0;
                for(int i =0;i<str.length();i++)                                                   //用一个for循环遍历数组
                {        
                        for(int j=0;j<=9;j++)                                                       //再用一个for循环遍历数字表的数组
                        {
                                if(new Character(ch).equals(new Character(numTable[j])))                            //判断是否ch是否是数字
                                        count++;                                                                                              //如果是数字则用计数器记录
                        }
                        
                }
                return count;
        }
public static void main(String args[])
        {
              String str = "Abc1k2k43k44j565jk35j8j0d9h87g6d5a4s3add21";              System.out.print(countNum(str));
     }
我循环了462次;
定义了两个数组,一个整型变量。(for里面的变量不计。)


刚看了试卷上的答案,它运用的方法更加高效简洁:
byte b[] = str.getBytes();
                int count = 0;
                for(int i=0;i<b.length;i++)
                {
                        System.out.println(b);
                        if(b>='0'&&b<='9')
                                count++;
                }

他利用了Ascll码表的位置进行判断,我之前没想到,你是否想到了呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

9 个回复

倒序浏览
本帖最后由 陈圳 于 2013-4-12 16:05 编辑
  1. /**统计数字的个数
  2.         */
  3.         public static int getCount(String str){
  4.                 return str.length()-str.replaceAll("\\d+", "").length();
  5.         }
复制代码

点评

膜拜大神..我百度了一下 才知道\\d在正则表达式中代表非数字....  发表于 2013-4-13 00:16

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
陈圳 发表于 2013-4-12 15:58

厉害,对字符串操作应该很熟悉吧?不过不知道考试能不能写这个呢!!
回复 使用道具 举报
钟林杰 发表于 2013-4-12 18:13
厉害,对字符串操作应该很熟悉吧?不过不知道考试能不能写这个呢!!

解题思路千千万.不必拘泥标准答案
回复 使用道具 举报
还要先回复才知道题目啊  
回复 使用道具 举报
hdsjsql 发表于 2013-4-12 22:16
还要先回复才知道题目啊

回复之后看到的不是题目,而是答案!!
回复 使用道具 举报
  1. class TestNum
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String str= "168fhkhkor789";
  6.                 System.out.println("此字符串中的数字个数为:"+countNum(str));
  7.         }

  8.         public static int countNum(String str)
  9.         {
  10.                 int count = 0;
  11.                 char[] a = new char[str.length()];
  12.                 for(int i=0;i<a.length;i++)
  13.                 {
  14.                         a[i] = str.charAt(i);
  15.                         if(a[i]>='0' && a[i]<='9')
  16.                                 count++;
  17.                 }
  18.                 return count;
  19.         }

  20. }
  21. 新手来献丑啦!
复制代码
回复 使用道具 举报
李尧 高级黑马 2013-4-13 00:11:10
8#
大脑秀逗了,想了半天想出来这么个笨办法...
  1. public static void main(String[] args)
  2.         {
  3.                 String str="Abc1k2k43k44j565jk35j8j0d9h87g6d5a4s3add21";
  4.                 System.out.println(countNum(str));
  5.         }
  6.         static int countNum(String str)
  7.         {
  8.                 int num=0;
  9.                 char[] chars=str.toCharArray();
  10.                 for(int x=0;x<chars.length;x++)
  11.                 {
  12.                         if(47<chars[x]&&chars[x]<58)
  13.                                 num++;
  14.                 }
  15.                 return num;
  16.         }
复制代码
回复 使用道具 举报
通行天下 发表于 2013-4-12 23:15

不错,很好的思路!
回复 使用道具 举报
李尧 发表于 2013-4-13 00:11
大脑秀逗了,想了半天想出来这么个笨办法...


比我的简洁高效 ,我虽然很快想出了解题的方法,可是写得太差了,毕竟写程序主要还是看代码的效率的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马