在ArrayList中搜索关键字并返回位置

时间:2018-09-19 02:43:20

标签: java search arraylist

我正在尝试编写一种方法,该方法搜索特定单词的ArrayList,然后打印该单词所有出现的位置。

这里是我所拥有的,在我输入要搜索的单词之前,它可以正常工作,但是什么都不打印:

import java.util.ArrayList; 
import java.util.Scanner;

public class W7E2 {
    public static void main(String[]args) {
        System.out.println("Please anter words: ");
        Scanner sc = new Scanner(System.in);
        String []w = sc.nextLine().split(" ");

        ArrayList<Words> word = new ArrayList<Words>();
        for(int i=0; i<w.length; i++) {
            word.add(new Words(w[i]));
        }
        System.out.println(word);

        System.out.println("Please enter the word you want to search: ");
        String search = sc.nextLine();


        for(Words ws: word) {
            if(ws.equals(search)) {
                System.out.println(ws.getLocation());
            }
        }

    }

    static class Words{
        private String wor;
        private static int number = -1;

        public Words(String wor) {
            this.wor = wor;
            number++;
        }
        public int getLocation() {
            return number;
        }

        public String toString() {
            return wor;
        }
    }
}

4 个答案:

答案 0 :(得分:2)

在您的if语句中,查看ArrayList是否包含您所拥有的单词:

if(ws.equals(search)) {
    System.out.println(ws.getLocation());
}

但是wsWord对象,除非覆盖equals()方法,否则它将永远不等于String对象。您需要执行以下操作:

if(ws.getwor().equals(search)) {
        System.out.println(ws.getLocation());
}

这是假设您为wor创建了一个get方法。

答案 1 :(得分:0)

除GBlodgett的答案外,类number中的Word是静态的,因此每个Word实例将具有相同的数字,您需要使用非静态变量来存储位置

static class Words{
    private String wor;
    private static int number = -1;
    private int location;

    public Words(String wor) {
        this.wor = wor;
        number++;
        location = number;
    }
    public int getLocation() {
        return location;
    }

    public String toString() {
     return wor;
   }
}

答案 2 :(得分:0)

您的代码应如下所示:

for(Words ws: word) {
    if(ws.toString().equals(search)) { //to change
        System.out.println(ws.getLocation());
    }
}

ws是Words类的对象,您必须将其更改为toString()

答案 3 :(得分:0)

您应该做的不是 ws.equals(search) 您需要添加 ws.toString().equals(search) 当您从 toString()
Words类中的方法。 所以代码应该看起来像这样,

  for(Words ws: word) {
            if(ws.toString().equals(search)) {
                System.out.println(ws.getLocation());
            }
        }