首页 >Java >java教程 >如何正确计算 Java 字符串中子字符串的出现次数?

如何正确计算 Java 字符串中子字符串的出现次数?

DDD
DDD原创
2025-01-04 15:25:40491浏览

How to Correctly Count Substring Occurrences in a Java String?

如何查找字符串中子字符串的出现次数

许多开发人员在尝试确定子字符串出现频率时遇到问题给定字符串中的出现次数。其中一个案例涉及以下算法:

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr, lastIndex);

    if (lastIndex != -1)
        count++;

    lastIndex += findStr.length();
}

System.out.println(count);

为什么算法会失败?

尽管成功识别了索引 0 处第一次出现的“hello”,但算法在搜索后续事件时进入无限循环。这是因为找到第一个匹配项后,lastIndex findStr.length() 变为等于 5,但 indexOf() 返回的下一个“-1”结果导致 while 循环再次迭代,lastIndex 仍设置为 0。

如何解决此问题?

有多种方法可以解决此问题。一种是使用不同的子字符串搜索方法,例如 Apache Commons Lang 的 StringUtils.countMatches()。这是一个示例:

String str = "helloslkhellodjladfjhello";
String findStr = "hello";

System.out.println(StringUtils.countMatches(str, findStr)); // Outputs 3

或者,您可以修改原始算法来处理“-1”情况:

String str = "helloslkhellodjladfjhello";
String findStr = "hello";
int lastIndex = 0;
int count = 0;

while (lastIndex != -1) {
    lastIndex = str.indexOf(findStr, lastIndex);

    if (lastIndex != -1) {
        count++;
        lastIndex += findStr.length();
    } else {
        break; // Exit the loop if no more occurrences are found
    }
}

System.out.println(count); // Outputs 3

以上是如何正确计算 Java 字符串中子字符串的出现次数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn