我想检查字符串List中是否包含字符串值val
,并将其称为stringList。
我这样做
if(stringList.contains(val)){
System.out.println("The value is in there");
}
else{
System.out.println("There's no such value here");
}
但似乎总是不包括价值。这是因为具有相同字符的两个String值实际上并不相等吗?对于“自制”类,我可以实现hashCode()和equals()并解决这个问题,我可以为String数据做什么?
编辑:
这里概述了我获得val的方式:
List<String> stringList = new ArrayList<String>();
stringList.add("PDT");
stringList.add("LDT");
stringList.add("ELNE");
String myFile = "/folder/myFile";
InputStream input = new FileInputStream(myFile);
CSVReader reader = new CSVReader(new InputStreamReader(input), ',','"', 1);
String[] nextLine;
try {
while ((nextLine = reader.readNext()) != null) {
if (nextLine != null) {
if (nextLine[6] != null){
String val = nextLine[6];
if(stringList.contains(val)){
System.out.println("Success");
}
}
}
}
答案 0 :(得分:10)
ArrayList.contains()
使用Object.equals()
检查是否相等(hashCode()
中没有List
)。这适用于字符串。可能,你的字符串确实没有包含在列表中......
您可能忽略了一些空白或大/小写或编码差异......
答案 1 :(得分:4)
听起来不对:contains
使用equals
而不是==
,所以如果字符串在列表中,则应该找到它。这可以在indexOf
使用的超类AbstractList的ArrayList
方法中进行验证。
在您进行修改之后,请确保在执行trim
之前contains
字符串,否则它们可能包含newline
个字符。
答案 2 :(得分:4)
请更多代码!
这有效:
import java.util.*;
public class Contains {
public static void main(String[] args) {
List<String> stringList = new ArrayList<String>();
stringList.add("someString");
String val = new String("someString");
if (stringList.contains(val)) {
System.out.println("The value is in there");
} else {
System.out.println("There's no such value here");
}
}
}
答案 3 :(得分:1)
尝试以下操作,首先通过迭代列表并分别检查每个元素来使检查更具体。当你点击你期望相同的元素时,这就是你应该看的东西。检查它们是否真的相同。也许有个案差异? (或者其他一些难以捉摸的但是像白色空间一样明显的区别?)
答案 4 :(得分:1)
尝试覆盖equals(){},以便您可以指定哪个属性需要比较相等....:P