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); // 打印找到的位置
    }
}

代码逐行解释

  1. import java.util.ArrayList;import java.util.List;

    • 导入所需的列表类,可以用于存储找到的位置。
  2. public class SubstringFinder {

    • 定义一个公共类SubstringFinder,作为代码的容器。
  3. public static List<Integer> findSubstringPositions(String source, String substring) {

    • 定义一个静态方法,接受源字符串和子字符串,返回一个包含所有出现位置的列表。
  4. List<Integer> positions = new ArrayList<>();

    • 初始化一个空的列表,用于存储找到的位置。
  5. int index = source.indexOf(substring);

    • 使用indexOf方法查找子字符串首次出现的位置。
  6. while (index != -1) {

    • 当找到子字符串的位置时,继续执行循环。
  7. positions.add(index);

    • 将当前子字符串的位置添加到列表中。
  8. index = source.indexOf(substring, index + 1);

    • 继续查找下一个出现的位置,采用偏移位置。
  9. return positions;

    • 返回记录所有出现位置的列表。
  10. public static void main(String[] args) { ... }

    • 主函数,作为程序入口,用于测试我们的findSubstringPositions方法。打印出找到的所有位置。

类图表示

我们也可以用mermaid语法将类图表示如下:

classDiagram
    class SubstringFinder {
        +List<Integer> findSubstringPositions(String source, String substring)
        +void main(String[] args)
    }

结论

通过上述流程和代码,你可以很容易地实现查找字符串中所有出现位置的功能。这一过程涵盖了基本的字符串操作和集合的使用,非常适合初学者进行练习。

你可以根据实际需求进一步扩展此代码,例如添加异常处理、支持大小写敏感查找等功能。希望这篇文章能够对你理解字符串处理的基本逻辑有所帮助,并鼓励你在编程中不断实践和探索。