如何实现“java 字符串所有包含的子串”

作为一名经验丰富的开发者,我将向你介绍如何实现在Java中获取字符串所有包含的子串的方法。在本文中,我将使用以下步骤展示整个过程。

步骤概览

以下是实现该功能的步骤概览:

journey
    理解需求 --> 找到所有子串的起始位置 --> 获取所有子串

下面,我将详细解释每个步骤以及相关代码。

步骤一:理解需求

在开始编写代码之前,我们首先需要明确任务需求。我们要获取给定字符串中所有包含的子串。

步骤二:找到所有子串的起始位置

我们需要找到给定字符串中所有子串的起始位置。可以使用两层循环来遍历字符串,并检查每个可能的子串是否在原字符串中出现。

下面是一段Java代码,用于找到所有子串的起始位置:

public static List<Integer> findSubstringIndices(String str, String subStr) {
    List<Integer> indices = new ArrayList<>();
    
    int strLength = str.length();
    int subStrLength = subStr.length();
    
    for (int i = 0; i <= strLength - subStrLength; i++) {
        int j;
        
        for (j = 0; j < subStrLength; j++) {
            if (str.charAt(i + j) != subStr.charAt(j)) {
                break;
            }
        }
        
        if (j == subStrLength) {
            indices.add(i);
        }
    }
    
    return indices;
}

在上面的代码中,我们首先创建了一个空列表indices来存储子串的起始位置。然后,我们使用两个循环来遍历字符串,并检查每个可能的子串是否与给定的子串相同。如果子串相同,则将起始位置(i的值)添加到列表indices中。

步骤三:获取所有子串

现在我们已经找到了所有子串的起始位置,接下来我们需要根据这些起始位置获取所有子串。

下面是一段Java代码,用于获取所有子串:

public static List<String> getAllSubstrings(String str) {
    List<String> substrings = new ArrayList<>();

    int strLength = str.length();

    for (int i = 0; i < strLength; i++) {
        for (int j = i + 1; j <= strLength; j++) {
            substrings.add(str.substring(i, j));
        }
    }

    return substrings;
}

在上面的代码中,我们首先创建了一个空列表substrings来存储所有子串。然后,我们使用两个循环来获取从起始位置到当前位置的子串,并将其添加到列表substrings中。

完整代码和使用示例

下面是完整的代码示例,包括上述两个方法:

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

public class SubstringExample {
    public static List<Integer> findSubstringIndices(String str, String subStr) {
        List<Integer> indices = new ArrayList<>();
        
        int strLength = str.length();
        int subStrLength = subStr.length();
        
        for (int i = 0; i <= strLength - subStrLength; i++) {
            int j;
            
            for (j = 0; j < subStrLength; j++) {
                if (str.charAt(i + j) != subStr.charAt(j)) {
                    break;
                }
            }
            
            if (j == subStrLength) {
                indices.add(i);
            }
        }
        
        return indices;
    }
    
    public static List<String> getAllSubstrings(String str) {
        List<String> substrings = new ArrayList<>();
    
        int strLength = str.length();
    
        for (int i = 0; i < strLength; i++) {
            for (int j = i + 1; j <= strLength; j++) {
                substrings.add(str.substring(i, j));
            }
        }
    
        return substrings;
    }
    
    public static void main(String[] args) {
        String str = "Hello World";
        String subStr = "l";
        
        List<Integer> indices = findSubstringIndices(str, subStr);
        System.out.println("Indices of substring '" + subStr + "': " + indices);
        
        List<String> substrings = getAllSubstrings(str);
        System.out.println("All substrings: " + substrings);
    }
}
``