可以使用一个双重循环来实现:

public static int countSubstring(String str1, String str2) {
    int count = 0;
    for (int i = 0; i < str1.length(); i++) {
        for (int j = 0; j < str2.length(); j++) {
            if (i + j >= str1.length() || str1.charAt(i + j) != str2.charAt(j)) {
                break;
            }
            if (j == str2.length() - 1) {
                count++;
            }
        }
    }
    return count;
}

其中,外层循环遍历str1中的每个字符,内层循环遍历str2中的每个字符,如果str1中当前位置和str2中当前位置不同,则直接退出内层循环;如果内层循环遍历到了str2的末尾,说明str2是str1的子串,将计数器加一。最终返回计数器的值即可。

另外,如果使用Java8及以上版本可以使用Stream API来实现:

public static long countSubstring(String str1, String str2) {
    return IntStream.range(0, str1.length() - str2.length() + 1)
            .filter(i -> str1.substring(i, i + str2.length()).equals(str2))
            .count();
}

其中,使用IntStream.range生成一个从0到(str1.length()-str2.length()+1)的整数流,然后使用filter过滤出str2是str1子串的位置,最后使用count方法得到计数器的值

给定两个长度小于1000的非空字符串str1和str2字符串中只包含小写字母如果str2是str1的子串请你返回str1中包含多少个子串str2如果str2不是str1的子串则返回0。用java实现。

原文地址: https://www.cveoy.top/t/topic/hf8m 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录