Java 查看列表是否包含字符串
Java seeing if list contains string
我正在尝试逐行遍历列表,以检查是否可以找到用户输入的字符串,如果可以,则打印该行。这是我目前所拥有的
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 语言字符串,任何帮助都将不胜感激。
此代码将涵盖您的山名在列表的几行中的情况。只需使用要搜索的 属性 的 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));
}
您不需要 "for" 只需使用您尝试过的包含即可。
另一个解决方法是用这个替换你的循环:
if(HillList.contains(HillName)) {
System.out.print(HillName);
}
因此,contains() 方法不是手动遍历 HillList,而是在使用 equals() 将条目与您的参数进行比较时为您完成。
您也可以只打印您的输入而不是匹配的 HillList 条目,因为它们是相等的。
编辑:这仅在您的 HillList 是字符串列表时有效
问题是 HillList.get(i)
表达式的引用类型没有 contains
方法。 HillList
的类型为 List<Hill>
,因此 HillList.get(i)
的类型为 Hill
。
您可以向Hill
class添加一个contains
方法;但我不希望 Hill
有 contains
方法 - 除了岩石、泥炭和偶尔的水力发电站之外,山丘包含什么? :) 如果 contains(String)
方法的名称包含参数,我当然不会期望 return 为真。
看起来您实际上是在尝试打印名称包含某些子字符串的山丘。例如,如果您输入 Ben
,您可能会为 Ben Nevis
、Ben Lawers
等打印 Hill
个实例。如果是这种情况,它看起来更合乎逻辑检查是获取 HillList.get(i)
的名称,并在 that 上调用 contains
,例如
if (HillList.get(i).getName().contains(HillName)) {
// ...
}
您还没有给出 Hill
class 的定义,所以我假设有一个这样的名称访问器。但这不一定是那样:您可以调用 HillList.get(i).toString().contains(HillName)
或其他方法,前提是方法 returns 字符串包含您要查找的内容。
请注意,编写循环的更好方法是使用增强的 for 循环:
for (Hill hill : HillList) {
if (hill.getName().contains(HillName)) {
System.out.println(hill);
}
}
如果 HillList
是例如LinkedList
.
(另请注意,按照惯例,HillList
应称为 hillList
,因为变量以小写字母开头)。
我正在尝试逐行遍历列表,以检查是否可以找到用户输入的字符串,如果可以,则打印该行。这是我目前所拥有的
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 语言字符串,任何帮助都将不胜感激。
此代码将涵盖您的山名在列表的几行中的情况。只需使用要搜索的 属性 的 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));
}
您不需要 "for" 只需使用您尝试过的包含即可。
另一个解决方法是用这个替换你的循环:
if(HillList.contains(HillName)) {
System.out.print(HillName);
}
因此,contains() 方法不是手动遍历 HillList,而是在使用 equals() 将条目与您的参数进行比较时为您完成。
您也可以只打印您的输入而不是匹配的 HillList 条目,因为它们是相等的。
编辑:这仅在您的 HillList 是字符串列表时有效
问题是 HillList.get(i)
表达式的引用类型没有 contains
方法。 HillList
的类型为 List<Hill>
,因此 HillList.get(i)
的类型为 Hill
。
您可以向Hill
class添加一个contains
方法;但我不希望 Hill
有 contains
方法 - 除了岩石、泥炭和偶尔的水力发电站之外,山丘包含什么? :) 如果 contains(String)
方法的名称包含参数,我当然不会期望 return 为真。
看起来您实际上是在尝试打印名称包含某些子字符串的山丘。例如,如果您输入 Ben
,您可能会为 Ben Nevis
、Ben Lawers
等打印 Hill
个实例。如果是这种情况,它看起来更合乎逻辑检查是获取 HillList.get(i)
的名称,并在 that 上调用 contains
,例如
if (HillList.get(i).getName().contains(HillName)) {
// ...
}
您还没有给出 Hill
class 的定义,所以我假设有一个这样的名称访问器。但这不一定是那样:您可以调用 HillList.get(i).toString().contains(HillName)
或其他方法,前提是方法 returns 字符串包含您要查找的内容。
请注意,编写循环的更好方法是使用增强的 for 循环:
for (Hill hill : HillList) {
if (hill.getName().contains(HillName)) {
System.out.println(hill);
}
}
如果 HillList
是例如LinkedList
.
(另请注意,按照惯例,HillList
应称为 hillList
,因为变量以小写字母开头)。