字符串中的子字符串搜索 (Java)

Substring search in String (Java)

我想在输入的文字中搜索输入的字母(Ctrl+f算法)。我想将它找到的字母的索引保存在一个数组中,然后将该数组打印到控制台。我写了这段代码,但它不能正常工作。打印输入文本的长度。我是初学者,我乐于接受批评以优化我的代码 :) 你能帮忙吗? ///

例如;

我的输入文字:“muammer akca akca”

我的输入搜索:“ak”

输出:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:索引 17 超出长度 17 的范围 在 Assignment5_2.main(Assignment5_2.java:17)

预期输出:

8

13


8 和 13 是“ak”索引

另一个例子:

我的输入文字:“Sotirios Delimanolis”

我的输入搜索:“ri”

输出:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:索引 17 超出长度 17 的范围 在 Assignment5_2.main(Assignment5_2.java:17)

预期输出:

4

4 是“ri”索引号

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Assignment5_2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        String search = scanner.nextLine();
        char[] textArray = text.toCharArray();
        char[] searchArray = search.toCharArray();
        int i,j;
        List<Integer> foundedArray = new ArrayList<Integer>();
        boolean foundControl = true;
        for (i=0 ; i< textArray.length ; i++){
            foundControl = true;
        } for (j=0 ; j<searchArray.length ; j++){
            if (textArray[i+j] != searchArray[j]){
                foundControl = false;
                break;
            }
        }
        if (foundControl){
            foundedArray.add(i);
            System.out.println(i);
        }
        for (i=0;i<foundedArray.size() ; i++){
            System.out.println(foundedArray.get(i));
        }
    }
}

这段代码应该可以做到。

String input = "akmuammer akca akca";
String test = "ak";
List<Integer> indexes = new ArrayList<>();
int index = -1;
do {
    index = input.indexOf(test, index + 1);
    if (index > -1) {
        indexes.add(index);
    }
} while (index > -1);
System.out.println(indexes);

我必须更新代码以使其计算索引 0 处测试模式的出现次数。以前的版本会错过这种情况。

对于当前输入,它将return [0, 10, 15]。对于 OP 的输入,它将 return [8, 13]。如果未找到匹配项,它将只是 return 一个空列表。