所以我将一个字符串拆分成一个数组,我想要求用户搜索一个单词,在数组中搜索所选单词并输出单词的每个位置。但是,indexOf函数似乎无法搜索数组?我能做出任何改正吗?
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = "Java String to String Array Example";
String strArray[] = str.split(" ");
String word;
int baby;
System.out.println("Please enter a message");
word = scan.nextLine();
baby = strArray.indexOf(word);
while (baby >= 0) {
System.out.println("The word occurs at index " + baby);
baby = strArray.indexOf(word, baby + word.length());
for (int counter = 0; counter < strArray.length; counter++) {
System.out.println(strArray[counter]);
}
}
}
答案 0 :(得分:0)
您可以使用正则表达式获取每个匹配单词的起始索引。
请看这个例子:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = "Java String to String Array Example";
String strArray[] = str.split(" ");
String word;
int baby;
System.out.println("Please enter a message");
word = scan.nextLine();
ArrayList<Integer> positions = new ArrayList();
Pattern p = Pattern.compile(word);
Matcher m = p.matcher(str);
while (m.find()) {
System.out.println("Occurs at position: " + m.start());
positions.add(m.start());
}
}
答案 1 :(得分:0)
首先,对于简单数组,indexOf
方法不存在 - 它是由List
实现的ArrayList
接口的方法。
您在int baby
中存储的索引实际上不是字符串中单词的索引,而是单词计数 - 即0表示第一个单词,1表示第二个单词。
indexOf
方法在第一次出现时停止,因此不适合我认为你想要做的事情。
这将做我认为你想要的事情:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String str = "Java String to String Array Example";
List<String> strArray = Arrays.asList(str.split(" "));
System.out.println("Please enter a message");
String word = scan.nextLine();
for (int i = 0; i < strArray.size(); i++)
if (strArray.get(i).equals(word))
System.out.println(word + " found at location " + i);
}