黑马程序员技术交流社区

标题: 关于String类从长字符串里边截取短字符串的简单写法 [打印本页]

作者: _etc    时间: 2015-3-27 21:33
标题: 关于String类从长字符串里边截取短字符串的简单写法
今天,我们学习了一个String类,练习中有一个需求,如下:  设计一个方法,用于获取一个字符串中指定子串出现的次数。  比如说“hanbasdnbafllgnbahjnbakqqqqlnbaxi”中有几个nba?

是这样,我们的“林青霞”使者 ——刘意老师给我们的标准答案是,以下方法写在一个类中:

public static void main(String[] args) {
                String str = "hanbasdnbafllgnbahjnbakqqqqlnbaxnbai";
                String regex = "nba";
                // 功能
                int count = getCount(str, regex);//  因为getCount在下边是用的静态调用,所以这里是静态方法,没有建立对象,直接方法名调用
                int count2 = getCount2(str, regex);
                System.out.println(count);
        }

        /*
         * 返回值:统计变量的值 int 参数列表:大串和小串
         */
        public static int getCount(String maxString, String minString) {
                // 定义统计变量
                int count = 0;
                // 在大串中查找小串一次
                int index = maxString.indexOf(minString);
                // 如果返回值不是-1,说明小串在大串中是存在的。
                while (index != -1) {
                        // 统计变量++
                        count++;
                        // 把查找过的数据给截取掉,重新赋值给大串
                        maxString = maxString.substring(index + minString.length());
                        // 在新的大串中查找一次小串
                        index = maxString.indexOf(minString);
                }
                return count;
        }



但是我们私下讨论了一种比较简单的方式,几句话就可以搞定,而且也已经得到了老师的承认,代码如下:

        public static void main(String[] args) {

                String s = "hanbasdnbafllgnbahjnbakqqqqlnbaxi";
                String s1 = "nba";
                int num = (s.length() - s.replaceAll("nba", "").length())/ s1.length();
                System.out.println(num);
        }


思路是:我们把长字符串中的nba装换成一个“”;这里注意是“”是没有内容的,相当于长字符串中的nba字符全部消失了。然后用原始长字符串的长度减去没有nba的字符串的长度,除以nba这个字符长度3,就得到了我们要找的这段字符中nba的个数。而这样一些,比源代码更省力,更好记。







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