Java获取字符串所有出现的位置

在Java中,我们经常需要对字符串进行操作和处理。有时候,我们需要获取一个字符串中某个子串出现的所有位置。本文将介绍如何使用Java来实现这个功能。

1. 使用indexOf方法获取第一个出现位置

Java中的String类提供了indexOf方法,用于获取一个字符串在另一个字符串中第一次出现的位置。该方法的签名如下:

public int indexOf(String str)

该方法返回第一次出现的位置索引值,如果没有找到则返回-1。

下面是一个示例代码:

String str = "Hello, world!";
int index = str.indexOf("o");
System.out.println("The first occurrence of 'o' is at index " + index);

输出结果为:

The first occurrence of 'o' is at index 4

2. 循环遍历获取所有出现位置

接下来,我们可以使用循环来获取字符串中某个子串的所有出现位置。可以使用一个变量来记录每次查找到的位置,并将该位置后移一位,继续查找下一次出现的位置。直到找不到为止。

下面是一个示例代码:

String str = "Hello, world!";
String subStr = "o";
int index = -1;
List<Integer> positions = new ArrayList<>();

while ((index = str.indexOf(subStr, index + 1)) != -1) {
    positions.add(index);
}

System.out.println("The occurrences of '" + subStr + "' are at positions: " + positions);

输出结果为:

The occurrences of 'o' are at positions: [4, 7]

3. 封装成方法

为了方便复用,我们可以将获取字符串中某个子串的所有出现位置的逻辑封装成一个方法。该方法接受两个参数:原始字符串和要查找的子串,返回一个包含所有出现位置的列表。

下面是一个示例代码:

public static List<Integer> getAllOccurrences(String str, String subStr) {
    int index = -1;
    List<Integer> positions = new ArrayList<>();

    while ((index = str.indexOf(subStr, index + 1)) != -1) {
        positions.add(index);
    }

    return positions;
}

String str = "Hello, world!";
String subStr = "o";
List<Integer> positions = getAllOccurrences(str, subStr);

System.out.println("The occurrences of '" + subStr + "' are at positions: " + positions);

输出结果为:

The occurrences of 'o' are at positions: [4, 7]

4. 流程图

下面是获取字符串所有出现位置的流程图:

flowchart TD
    start[开始]
    input[输入原始字符串和要查找的子串]
    output[输出所有出现位置的列表]
    process[初始化索引和位置列表]
    loop[循环查找子串]
    judge[判断是否找到子串]
    update[更新索引并添加位置]
    end[结束]

    start --> input
    input --> process
    process --> loop
    loop --> judge
    judge -- 是 --> update
    update --> loop
    judge -- 否 --> end
    loop --> end

5. 类图

下面是获取字符串所有出现位置的类图:

classDiagram
    class StringUtils {
        +getAllOccurrences(str: String, subStr: String): List<Integer>
    }

结语

本文介绍了使用Java获取字符串所有出现的位置的方法。我们可以使用indexOf方法获取第一个出现位置,也可以使用循环遍历获取所有出现位置。为了方便复用,我们还封装了一个方法。希望本文能帮助你在Java中处理字符串时更加方便快捷。