将字符串拆分为数组,并搜索字符串

时间:2016-06-16 16:08:05

标签: java arrays split indexof

所以我将一个字符串拆分成一个数组,我想要求用户搜索一个单词,在数组中搜索所选单词并输出单词的每个位置。但是,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]);
        }
    }
}

2 个答案:

答案 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);

}