/* 本关任务:接收两个字符串,统计第二个字符串在第一个字符串里出现的次数。 输出样式:“出现的次数:x”。 */ import java.util.Scanner; public class StrTest { public static void main(String[] args) { // 请在Begin-End间编写代码 /********** Begin **********/ // 第一步:接收输入的第一个字符串 // 第二步:接收输入的第二个字符串 // 第三步:查找第二个字符串在第一个字符串中出现次数 /********** End **********/ } }
时间: 2025-05-17 10:15:07 浏览: 24
### Java 实现字符串匹配计数功能
在 Java 中,可以通过多种方式来计算一个字符串在另一个字符串中出现的次数。以下是基于 `indexOf()` 方法的一种常见实现方案:
#### 使用 `indexOf` 的解决方案
通过循环调用 `String.indexOf(String str, int fromIndex)` 方法可以逐步查找目标子串的位置,并记录其出现的总次数。
```java
public class SubstringCount {
public static int countOccurrences(String mainStr, String subStr) {
if (subStr.isEmpty()) return 0;
int count = 0;
int index = 0;
while ((index = mainStr.indexOf(subStr, index)) != -1) {
count++;
index += subStr.length();
}
return count;
}
public static void main(String[] args) {
String oneStr = "ckkccbacadkabckebfkabkskabc";
String toStr = "abc";
int result = countOccurrences(oneStr, toStr);
System.out.println("The substring '" + toStr + "' appears " + result + " times.");
}
}
```
上述代码实现了以下逻辑:
- 如果子串为空,则返回 0[^1]。
- 初始化计数器 `count` 和索引位置 `index`。
- 调用 `mainStr.indexOf(subStr, index)` 查找子串首次出现的位置。
- 每次找到后更新索引位置为当前匹配结束后的下一个字符位置。
- 循环直到找不到更多匹配项为止。
#### 基于逐字符比较的方法
另一种方法是遍历主字符串中的每一个可能起始位置,逐一检查是否存在完整的子串匹配。这种方法虽然效率较低,但在某些特定场景下仍然适用。
```java
import org.junit.Test;
public class CharByCharComparison {
@Test
public void test3() {
String str = "12311123123"; // 主字符串
String s = "123"; // 子字符串
char[] charArray = str.toCharArray();
char[] charArray2 = s.toCharArray();
int length = charArray2.length; // 子字符串长度
int count = 0; // 计数器
int cur = 0; // 当前匹配进度
for (char c1 : charArray) {
char c2 = charArray2[cur];
if (c1 == c2) {
if (cur == (length - 1)) {
count++; // 完成一次匹配
cur = 0; // 重置状态
} else {
cur++; // 进入下一字符匹配
}
} else {
cur = 0; // 失败则重新开始
}
}
System.out.println("统计到字符串的个数:" + count);
}
}
```
该方法的核心在于维护一个临时变量 `cur` 来跟踪当前正在尝试匹配的目标子串位置[^2]。每次成功匹配一部分时增加 `cur`;一旦失败就将其重置为零。
### 性能对比分析
对于较短的输入数据集来说两种算法都可以很好地工作。然而当处理非常大的文本文件或者频繁查询操作时,推荐优先考虑使用内置函数如 `indexOf()` 因为其经过高度优化并且通常具有更好的性能表现[^4]。
阅读全文
相关推荐


















