7

我想检查一个字符串值val是否包含在字符串列表中,我们称之为 stringList。

我正在这样做

if(stringList.contains(val)){
  System.out.println("The value is in there");
}
else{
  System.out.println("There's no such value here");
}

但似乎总是不包括该值。这是因为具有相同字符的两个字符串值实际上并不相等吗?对于“自制”类,我可以实现 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");
            }
        }
    }
}
4

5 回答 5

14

ArrayList.contains()用于Object.equals()检查是否相等(hashCode()不涉及List)。这适用于字符串。可能,您的字符串确实不包含在列表中...

您可能忽略了一些空格或大写/小写或编码差异......

于 2012-09-23T11:47:32.757 回答
4

这听起来不对:contains使用equals而不是==,因此如果字符串在列表中,则应该找到它。这可以在 使用的超类 AbstractList 的方法indexOf得到验证。ArrayList

在您进行编辑之后,请确保trim在执行 之前先使用字符串contains,否则它们可能包含newline字符。

于 2012-09-23T11:47:43.173 回答
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");
        }
    }
}
于 2012-09-23T11:49:47.897 回答
1

尝试以下操作,首先通过迭代列表并分别检查每个元素来使检查更加具体。比,当你击中你期望相等的元素时,这就是你应该看到的。检查它们是否真的相等。也许有一个案例差异?(或其他一些难以捉摸但明显的区别,如空白?)

于 2012-09-23T11:49:32.283 回答
1

尝试重写equals(){},这样你就可以指定哪个属性需要比较相等性....:P

于 2013-12-14T14:21:26.253 回答