一个小题目的三种不同的解法

  有一道很经典的Java题目,虽然很简单,但是可以开发出很多种不同的解法,这是我在今天重新复习了正则的时候,忽然回想起来的.题目的名字是:"查找一个小串在大串中出现的次数."有三种思路,第一种,利用substring,通过寻找小串出现的位置,改变大串从小串出现的位置处重新寻找小串的位置,以此类推.第二种解法,直接用小串分割大串,分割出的字符串数组长度-1即是小串出现的次数,但是这时要考虑一种特殊情况,即小串出现在末尾处.这时候字符串数组的长度就是小串出现的次数.第三种利用正则表达式中Pattern和Matcher类,进行对于小串的匹配,每匹配一次,将计数器的数值加1.下面是这三种方法的代码:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

//在大串中寻找小串出现的次数..
public class Demo2 {
    public static void main(String[] args) {
        String str="abc123abc123abadasdabc";
        String st="abc";
        getCount(str,st);
    }
    /*通过split函数.*/
    /*
    private static void getCount(String str, String st) {
        int count=0;
        if(!str.contains(str)) {
            System.out.println(str+" 不包含 "+st);
            return;
        }
        if(str.equals(st)) {
            System.out.println("个数为:"+1);
            return;
        }
        String [] sts=str.split(st);
        count=sts.length;
        if(str.endsWith(st)) {
            count++;
        }
        System.out.println("个数为:"+(count-1));
    }
    */
    /*通过substring*/
    /*private static void getCount(String str, String st) {
        int count=0;
        int pos=0;
        if(!str.contains(st)) {
            System.out.println(str+" 不包含 "+st);
            return;
        }
        while(str.contains(st)) {
            count++;
            pos=str.indexOf(st);
            str=str.substring(pos+st.length(), str.length());
        }
        System.out.println(count);
    }*/
/*
 *     通过正则表达式的匹配功能
 * */
    private static void getCount(String str, String st) {
        int count=0;
        String regex=st;
        Pattern p=Pattern.compile(regex);
        Matcher m=p.matcher(str);
        while(m.find()) /*find将从str开头开始寻找与regex匹配的字串,利用循环,不断寻找,直到找不到为止*/{
            count++;
        }
        System.out.println(count);
    }
}

 

posted @ 2016-06-23 19:26  hlhdidi  阅读(199)  评论(0编辑  收藏  举报