Java 字符串找出所有出现位置的方法
在开发过程中,字符串操作是非常常见的一项任务。有时我们需要找出一个子字符串在另一个字符串中所有出现的位置。本文将为刚入行的小白详细讲解如何实现这一功能,并通过代码实例来帮助你理解。
流程概述
在实现“找出所有出现的位置”功能的过程中,我们可以遵循以下步骤:
步骤 | 描述 |
---|---|
1 | 定义主函数,接收主字符串和子字符串 |
2 | 初始化一个空的列表,用于存储位置 |
3 | 使用循环查找子字符串的位置 |
4 | 如果找到,记录位置并继续查找 |
5 | 返回记录的位置列表 |
下面是用mermaid语法表示的流程图:
flowchart TD
A[定义主函数] --> B[初始化位置列表]
B --> C[查找子字符串]
C --> D{找到位置吗?}
D -- Yes --> E[记录位置]
D -- No --> F[返回位置列表]
E --> C
实现代码
让我们逐步实现这个功能。下面是最终代码的示例:
import java.util.ArrayList;
import java.util.List;
public class SubstringFinder {
// 主函数,接收源字符串和待查找的子字符串
public static List<Integer> findSubstringPositions(String source, String substring) {
List<Integer> positions = new ArrayList<>(); // 初始化空的列表以存储找到的位置
int index = source.indexOf(substring); // 查找第一次出现的位置
while (index != -1) { // 如果找到位置
positions.add(index); // 记录下当前的位置
index = source.indexOf(substring, index + 1); // 查找下一个出现的位置
}
return positions; // 返回位置列表
}
// 测试函数
public static void main(String[] args) {
String source = "This is a test string. This is only a test.";
String substring = "test";
List<Integer> positions = findSubstringPositions(source, substring); // 调用查找函数
System.out.println("Substring positions: " + positions); // 打印找到的位置
}
}
代码逐行解释
-
import java.util.ArrayList;
和import java.util.List;
- 导入所需的列表类,可以用于存储找到的位置。
-
public class SubstringFinder {
- 定义一个公共类
SubstringFinder
,作为代码的容器。
- 定义一个公共类
-
public static List<Integer> findSubstringPositions(String source, String substring) {
- 定义一个静态方法,接受源字符串和子字符串,返回一个包含所有出现位置的列表。
-
List<Integer> positions = new ArrayList<>();
- 初始化一个空的列表,用于存储找到的位置。
-
int index = source.indexOf(substring);
- 使用
indexOf
方法查找子字符串首次出现的位置。
- 使用
-
while (index != -1) {
- 当找到子字符串的位置时,继续执行循环。
-
positions.add(index);
- 将当前子字符串的位置添加到列表中。
-
index = source.indexOf(substring, index + 1);
- 继续查找下一个出现的位置,采用偏移位置。
-
return positions;
- 返回记录所有出现位置的列表。
-
public static void main(String[] args) { ... }
- 主函数,作为程序入口,用于测试我们的
findSubstringPositions
方法。打印出找到的所有位置。
- 主函数,作为程序入口,用于测试我们的
类图表示
我们也可以用mermaid语法将类图表示如下:
classDiagram
class SubstringFinder {
+List<Integer> findSubstringPositions(String source, String substring)
+void main(String[] args)
}
结论
通过上述流程和代码,你可以很容易地实现查找字符串中所有出现位置的功能。这一过程涵盖了基本的字符串操作和集合的使用,非常适合初学者进行练习。
你可以根据实际需求进一步扩展此代码,例如添加异常处理、支持大小写敏感查找等功能。希望这篇文章能够对你理解字符串处理的基本逻辑有所帮助,并鼓励你在编程中不断实践和探索。