第一种方式:
假设要匹配的字符串是"asd",就先找到a再判断下一个是不是d,如果是就判断下一个是不是s,都满足条件就说明找到了.
具体代码如下:
public static void main(String[] args) { //控制台接受字符串,判断该字符串中有几个asd小字符串 System.out.println("please input a String:"); //接受数据并用赋值给next String next = new Scanner(System.in).next(); //调用String类里 char[] chars = next.toCharArray(); int count=0; for (int i = 0; i < chars.length-2; i++) { if(chars[i]=='a'&&i<=chars.length-3){ if(chars[i+1]=='s'){ if(chars[i+2]=='d'){ count++; } } } } }
存在问题如果求字符串"aaaaaaaa"中"aa"的个数就会出现多次匹配的问题.解决方案:如果匹配成功就让指针加3.
public static void main(String[] args) { //控制台接受字符串,判断该字符串中有几个asd小字符串 System.out.println("please input a String:"); //接受数据并用赋值给next String next = new Scanner(System.in).next(); //调用String类里 char[] chars = next.toCharArray(); int count=0; for (int i = 0; i < chars.length-2; i++) { if(chars[i]=='a'&&i<=chars.length-3){ if(chars[i+1]=='s'){ if(chars[i+2]=='d'){ count++; i+=3; } } } } }
第二种方式:
利用String类里的subString()方法一次截取3个字符,调用equals()方法,比较两个字符串是否相等.
public static void main(String[] args) { //控制台接受字符串,判断该字符串中有几个asd小字符串 System.out.println("please input a String:"); //接受数据并用赋值给next String next = new Scanner(System.in).next(); //count记录匹配的小字符串的个数 int count=0; //i的最大值为next.length()-3即该字符串倒数第3个字符 for (int i = 0; i < next.length()-2; i++) { if(next.charAt(i)=='a'){ String s = next.substring(i, i + 3); if("asd".equals(s)){ count++; i+=3; } } } }
第三种方式:
利用String类里的spilt("asd")方法,把字符串以"asd"分割成一个数组.我们要求的数就等于这个数组的长度-1代码如下:
public static void main(String[] args) { //控制台接受字符串,判断该字符串中有几个asd小字符串 System.out.println("please input a String:"); //接受数据并用赋值给next String next = new Scanner(System.in).next(); //count记录小字符串的个数 int count=0; String[] arr = next.split("asd"); System.out.println(arr.length-1); }
分割过程中发现如果出现如下几种情况:
"adadad" ---"ad" 数组为空长度为零
"sadad"----"ad" 数组长度为1
通过尝试发现,只要在要分隔的字符串前加上" "就能得到一个长度为匹配数加1的数组.
public static void main(String[] args) { //控制台接受字符串,判断该字符串中有几个asd小字符串 System.out.println("please input a String:"); //接受数据并用赋值给next String next = new Scanner(System.in).next()+" "; //count记录小字符串的个数 int count=0; String[] arr = next.split("asd"); System.out.println(Arrays.toString(arr)); System.out.println(arr.length-1); }
关于此问题的详细解释可以参考:https://blog.csdn.net/qq_21551773/article/details/124232281?spm=1001.2014.3001.5502