如何检查ArrayList中某个条目的String和一个String-attribute(多个)的相等性?

时间:2015-12-10 11:08:57

标签: java string arraylist

我正在尝试以ArrayList的形式创建一个注册表,它将保存我读过的各种书籍。 该计划只有两个班级。一个作为条目的模板(名称:条目),另一个管理ArrayList中的条目(名称:注册表)。

这些是条目的属性:

private final String title;
private final String mangaka;
private final String year;
private final String genre;
private final String volumes;
private String completelyScanlated;
private String licensedInGerman;
private String read; 
private String comments; 

因此有这个构造函数:

public Entry(final String title, final String mangaka, final String year, final String genre, final String volumes, 
String completelyScanlated, String licencedInGerman, String read, String comment)
{
    this.title = title;
    this.mangaka = mangaka;
    this.year = year;
    this.genre = genre;
    this.volumes = volumes;
    this.completelyScanlated = completelyScanlated;
    this.licensedInGerman = licensedInGerman;
    this.read = read;
    this.comments = comments;
}

“注册表”类只有一个属性:

ArrayList<Entry> entries = new ArrayList<Entry>();

用户通过'Scanner'创建一个条目,因此在控制台中键入Strings。创建的对象通过以下方式保存在ArrayList中:

Entry object = new Entry(title, mangaka, year, genre, volumes, completelyScanlated, licensedInGerman, read, comments);
    entries.add(object);

现在我想检查一个String(也是用控制台输入创建的)是否等于属性“title”。我可以用方法“.contains()”来检查输入的相等性,但是这个方法会比较所有属性。有没有办法只检查一个属性?

以下是非工作代码:

public void findEntry()
{
    Scanner input = new Scanner(System.in);

    System.out.println("Which title do you want to search for?");
    String searchedEntry = input.nextLine();
    System.out.println();
    if (entries.contains(searchedEntry)) {
        int x = entries.indexOf(searchedEntry);
        entries.get(x);
        //Entry.showDetails();
    }
}

结果是通过控制台发出(代码正在运行)。

提前致谢

2 个答案:

答案 0 :(得分:1)

我假设你的入门课程中你的标题有一个吸气剂。像getTitle()这样的东西。然后迭代所有条目并检查其标题是否包含搜索字符串。

public void findEntry(){
    Scanner input = new Scanner(System.in);

    System.out.println("Which title do you want to search for?");
    String searchedEntry = input.nextLine();
    System.out.println();
    for(Entry entry : entries){
        if(entry.getTitle().contains(input))
            entry.showDetails();   // or Whatever
    }
}

更好的做法是将标题和搜索字符串转换为小写字母。

if(entry.getTitle().toLowerCase().contains(input.toLowerCase()))

所以你可以搜索“魔戒之王”并找到“指环王:戒指的团契”。

答案 1 :(得分:0)

而不是

if (entries.contains(searchedEntry)) {
    int x = entries.indexOf(searchedEntry);
    entries.get(x);
    //Entry.showDetails();
}

您可以遍历条目。像这样:

for(Entry entry: entries) {
    if(entry.getTitle().equals(searchedEntry)) {
        // Do whatever it has to do.
    }
}

如果标题不需要与案例匹配,您可以使用:

if(entry.getTitle().equalsIgnoreCase(searchedEntry))