在Java中统计字符串出现次数
在Java中,有几种方法可以统计一个字符串在另一个字符串中出现的次数,以下是几种常见的实现方式:

方法1:使用String的indexOf()方法
public static int countSubstring(String str, String subStr) {
int count = 0;
int index = 0;
while ((index = str.indexOf(subStr, index)) != -1) {
count++;
index += subStr.length();
}
return count;
}
方法2:使用正则表达式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public static int countSubstringWithRegex(String str, String subStr) {
Pattern pattern = Pattern.compile(Pattern.quote(subStr));
Matcher matcher = pattern.matcher(str);
int count = 0;
while (matcher.find()) {
count++;
}
return count;
}
方法3:使用Java 8的Stream API
import java.util.regex.Pattern;
public static long countSubstringWithStream(String str, String subStr) {
return Pattern.compile(Pattern.quote(subStr))
.splitAsStream(str)
.count() - 1;
}
使用示例
public class Main {
public static void main(String[] args) {
String text = "hello world, hello java, hello programming";
String word = "hello";
int count1 = countSubstring(text, word);
int count2 = countSubstringWithRegex(text, word);
long count3 = countSubstringWithStream(text, word);
System.out.println("方法1结果: " + count1);
System.out.println("方法2结果: " + count2);
System.out.println("方法3结果: " + count3);
}
// 这里插入上面任意一个方法实现
}
注意事项
-
如果
subStr为空字符串,以上方法可能会返回异常结果或无限循环,需要添加检查:if (subStr == null || subStr.isEmpty()) { return 0; } -
这些方法统计的是不重叠的出现次数,在"aaa"中统计"aa":
- 方法1和2会返回1(不重叠)
- 如果需要统计重叠的出现次数,需要修改方法1中的
index += subStr.length();为index++;
-
对于大小写敏感的统计,直接使用上述方法;对于不区分大小写的统计,可以在正则表达式方法中使用
Pattern.CASE_INSENSITIVE标志。
选择哪种方法取决于你的具体需求和Java版本偏好,方法1是最通用的,方法2更灵活,方法3在Java 8+中更简洁。

