Java 通过部分用户条目搜索数组列表

Java 通过部分用户条目搜索数组列表,java,arraylist,Java,Arraylist,我试图用JAVA程序按用户条目搜索和打印ArrayList值 用户将输入一个ID(字符串),我想打印ArrayList条目或包含输入ID的条目。ArrayList中的所有ID都包含在所有大写字母中,因此我在下面的代码中使用了.toUpperCase() 我目前已经使ArrayList只能通过ID的完全匹配进行搜索。例如,如果ID为“HOUSE”,则用户只能输入完整的ID“HOUSE”,以获取返回的ArrayList值 我想添加partial entry的特性来返回数组列表中的值。例如,如果两个I

我试图用JAVA程序按用户条目搜索和打印ArrayList值

用户将输入一个ID(字符串),我想打印ArrayList条目或包含输入ID的条目。ArrayList中的所有ID都包含在所有大写字母中,因此我在下面的代码中使用了.toUpperCase()

我目前已经使ArrayList只能通过ID的完全匹配进行搜索。例如,如果ID为“HOUSE”,则用户只能输入完整的ID“HOUSE”,以获取返回的ArrayList值

我想添加partial entry的特性来返回数组列表中的值。例如,如果两个ID是“HOUSE”和“HOUSTON”,我希望用户能够输入“hou”,并获取返回的包含“hou”的两个arraylist值

我是JAVA新手,我已经在这里做了很多研究,但是我仍然无法在这里找到一个部分条目。我将感谢任何帮助。下面是我为完整的ID条目编写的代码

public void find(ArrayList<Plants> pl) {

    boolean found = false;
    int i = 0;
    String inputName = null;

    System.out.println("Enter the ID or partial ID of the plant you would like to find: ");
    inputName = input.nextLine();

    String nameCaps = inputName.toUpperCase();

    while(!found && i < pl.size()) {

        String id = pl.get(i).getId();

        if (id.equals(nameCaps)) {
            found = true;
            System.out.println(pl.get(i).toString());
        }
        else {
            i ++;
        }
    }

    if (!found) {
        System.out.println("A plant with that ID does not exist");
    }

} // find end
public void find(ArrayList pl){
布尔值=false;
int i=0;
字符串inputName=null;
System.out.println(“输入要查找的设备的ID或部分ID:”);
inputName=input.nextLine();
字符串nameCaps=inputName.toUpperCase();
而(!found&&i
使用字符串类中的方法。 因此,您可以这样做(在找到一个条目后不中断循环,因为您希望打印所有可能的匹配项)

使用字符串类中的方法。 因此,您可以这样做(在找到一个条目后不中断循环,因为您希望打印所有可能的匹配项)


您可以使用增强的for循环。不明白为什么我们在这里需要for循环,因为您只使用索引来访问列表中的元素。@AominèYes。但我想让它尽可能接近OP迄今为止的尝试。您甚至可以使用Java8 streams来解决这个问题。。。当我需要访问元素并同时处理索引时,我通常使用for循环,如果我只对元素感兴趣,那么我通常使用增强的for循环。但我想这是一个偏好的问题。是的,这很有效!更简单的是,即使您最终输入了整个ID,我也不熟悉string类中的startswith方法。我会支持你的答案,但我没有15个代表:(不客气。。如果解决了问题,您仍然可以接受答案。您可以使用增强的for循环。不明白为什么我们需要在这里使用for循环,因为您只使用索引访问列表中的元素。@Aominè是的。但我想让它尽可能接近OP迄今为止所尝试的内容。您甚至可以使用Java 8 streams.fair eno解决此问题呃……当我需要访问元素并同时对索引做一些事情时,我通常使用for循环,如果我只对元素感兴趣,那么我通常会使用增强的for循环。但我想这是一个偏好问题。是的,这非常有效!更简单,即使你最终键入了整个ID。我我不熟悉string类中的startswith方法。我会支持你的答案,但我没有15个rep:(不客气..如果答案解决了你的问题,你仍然可以接受
for (int i = 0; i < pl.size(); i++) {
    String id = pl.get(i).getId();

    if (id.startsWith(nameCaps)) {
        found = true;
        System.out.println(pl.get(i).toString());
    }
}
for (Plant plant : pl) {
   if (plant.getId().startsWith(nameCaps)) {
   ...
  }
}