字符串中的子字符串搜索 (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 一个空列表。
我想在输入的文字中搜索输入的字母(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 一个空列表。