Java查看列表是否包含字符串

Java查看列表是否包含字符串,java,list,contains,Java,List,Contains,我试图逐行遍历列表,检查是否可以找到用户输入的字符串,以及是否打印了该行。这就是我目前所拥有的 while(true) { System.out.println("Please enter a hill name or quit to exit: "); String HillName = input.next(); if (HillName.equals("quit")) { break; }

我试图逐行遍历列表,检查是否可以找到用户输入的字符串,以及是否打印了该行。这就是我目前所拥有的

    while(true) {
        System.out.println("Please enter a hill name or quit to exit: ");
        String HillName = input.next();
        if (HillName.equals("quit")) {
            break;
        }
        else {
            for(int i=0; i < HillList.size(); i++) {
                if (HillList.get(i).contains(HillName)) {
                    System.out.println(HillList.get(i));
                }
            }
        }
    }

我在contains上遇到一个错误,表示无法解析symbol方法包含java语言字符串,非常感谢您的帮助。

此代码将介绍在列表的几行中包含希尔名称的情况。只需使用要搜索的属性的getterMethod设置$$GetYourHillPropertyName$$

     while(true) {
            System.out.println("Please enter a hill name or quit to exit: ");
            String HillName = input.next();
            if (HillName.equals("quit")) {
                break;
            }
            else {
events
.stream()
.filter(e-> e.$$getYourHillProperyName$$.contains(HillName))
.forEach(xx->System.out.println(xx));

            }

您不需要像以前那样使用contains。另一个修复方法是用以下内容替换您的循环:

if(HillList.contains(HillName)) {
    System.out.print(HillName);
}
因此,与手动遍历HillList不同,contains方法在将条目与带有equals的参数进行比较时为您执行此操作

您也可以只打印输入,而不是匹配的HillList条目,因为它们相等


编辑:仅当Hillist是字符串列表时,此选项才有效。问题是Hillist.geti表达式的引用类型没有包含方法。HillList具有类型列表,因此HillList.geti具有类型Hill

可以向Hill类添加contains方法;但我不希望一座小山有一个包含方法——除了岩石、泥炭和偶尔的水电站,小山还包含什么如果containsString方法的名称包含参数,我当然不会期望它返回true

看起来您实际上正在尝试打印名称包含某些子字符串的hills。例如,如果您输入Ben,您可能会打印Ben Nevis、Ben Lawers等的Hill实例。如果是这种情况,看起来更符合逻辑的检查是获取hillist.geti的名称,并在此基础上调用contains,例如

您还没有给出Hill类的定义,所以我假设有这样一个名称的访问器。但它不一定是这样的:您可以调用hillist.geti.toString.containsHillName或其他东西,只要该方法返回包含您要查找的内容的字符串

请注意,编写循环的更好方法是使用增强的for循环:

for (Hill hill : HillList) {
  if (hill.getName().contains(HillName)) {
    System.out.println(hill);
  }
}
如果HillList是一个链接列表,则反复调用HillList.geti会更加冗长、容易出错,并且可能会降低效率


还要注意,Hillist按惯例应称为Hillist,因为变量以小写字母开头。

Hillist的类型是什么?可能是生的。在这种情况下,将其更改为List。您正在检查hill名称是否位于列表中的一个字符串中。这就是你想要的,还是每个山丘的名字都应该与列表中的条目完全对应?在Eran的评论中+1这是我的HillList 255,Ben Nevis,Highland,1344.5,56.796849,-5.003525中的一个条目示例,这是我定义HillList列表HillList=Hill.readHills的地方;所以我没有把它改为List,因为它包含一些int和double。你的Hill类有contains方法吗?如果不是,那就是直接的问题。你真的是指HillList.geti.getName.containsHillName这样的东西吗?啊,好的,我现在会尝试在类中创建一个contains方法,如果我运气好的话,我会继续发帖这些问题有什么问题。。。我们正在为我们的努力回答并获得否决票。我不确定否决票是什么。对不起,还有你的解决方案。我的定义是什么?问题是你的回答是错误的。OP不想检查HillName是否在列表中。这是一个Hill列表,而不是字符串,因此contains检查总是产生false。作者补充说,稍后@AndyTurnerWell,即使它不是一个列表,您也在更改代码将执行的操作。似乎作者打算检查名称的一部分是否与输入匹配。你假设一个相等性检查是等价的,事实并非如此,所以你的答案仍然是错误的。谢谢,伙计,这只是一个翻来覆去的问题,它可以满足我的需要,但我正在阅读所有其他内容,只是问了一个关于getName的问题,这是一个应该由我自己定义的方法吗?是的,你可以自己定义它。构造器的第二个参数,例如Ben Nevis是名称,对吗?我猜你把它分配给一个字段。添加一个getName方法来返回该字段。或者,如果该字段可以直接访问,您可以简单地引用它,例如hill.name,放弃getter方法。但是你应该明白,getter方法通常更好,因为它们允许将来有更多的灵活性。
for (Hill hill : HillList) {
  if (hill.getName().contains(HillName)) {
    System.out.println(hill);
  }
}