我尝试逐行遍历列表以检查是否可以找到用户输入的字符串,如果是,则打印该行。这就是我到目前为止所拥有的
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));
}
}
}
}
我收到错误,包含说不能解析符号方法包含java lang字符串,感谢任何帮助。
答案 0 :(得分:0)
此代码将涵盖您在列表的多行中具有您的山丘名称的情况。只需使用要搜索的属性的getterMethod设置$$ getYourHillProperyName $$。
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));
}
您不需要“仅”使用您尝试过的包含。
答案 1 :(得分:0)
问题是HillList.get(i)
表达式的引用类型没有contains
方法。 HillList
的类型为List<Hill>
,因此HillList.get(i)
的类型为Hill
。
您可以向contains
类添加Hill
方法;但是我不希望Hill
有一个contains
方法 - 除了岩石,泥炭和偶尔的水力发电站之外,山丘还包含什么? :)如果名称包含参数,我当然不希望contains(String)
方法返回true。
看起来您实际上正在尝试打印名称中包含某些子字符串的山丘。例如,如果您输入了Ben
,则可以打印Hill
,Ben Nevis
等的Ben Lawers
个实例。如果是这种情况,它看起来更符合逻辑检查是获取HillList.get(i)
的名称,并在 上调用contains
,例如
if (HillList.get(i).getName().contains(HillName)) {
// ...
}
你没有给出Hill
类的定义,所以我假设这个名字有一个访问者。但它不一定是这样的:你可以调用HillList.get(i).toString().contains(HillName)
或其他东西,只要该方法返回包含你正在寻找的东西的字符串。
请注意,编写循环的更好方法是使用增强的for循环:
for (Hill hill : HillList) {
if (hill.getName().contains(HillName)) {
System.out.println(hill);
}
}
如果HillList.get(i)
例如HillList
,则重复调用LinkedList
会更加冗长,容易出错,效率可能会降低。 HillList
。
(另请注意,hillList
应按惯例调用is
,因为变量以小写字母开头。)
答案 2 :(得分:-2)
另一种解决方法是用这个替换你的循环:
if(HillList.contains(HillName)) {
System.out.print(HillName);
}
因此,不是手动迭代你的HillList,而是contains()方法为你做的,同时将参数的条目与equals()进行比较。
此外,您可以打印输入而不是匹配的HillList条目,因为它们是相同的。
编辑:仅当您的HillList是字符串列表
时才有效