有一道很经典的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); } }