方法包含不起作用

时间:2015-05-18 12:56:19

标签: java opencsv

我正在尝试检查另一个csv文件中是否存在一行csv文件。我的代码如下:

public void readIncassiOLG(String filename,List<String []> itemsToCheck){
    CSVReader reader = new CSVReader(new FileReader(filename),CSV_SEPARATOR);
    List<String []> body = reader.readAll();
    for(String[] item : itemsToCheck){
        if(body.contains(item)){
            System.out.println("Item present");
        }
        else{
            System.out.println("Item not present");
        }
    }
}

要检查的项目(itemsToCheck)是从第一个文件过滤的行,我检查了两个文件中都有一行,但是下面的方法打印我总是“项目不存在”。

有关于此的任何建议吗?

4 个答案:

答案 0 :(得分:4)

如果此列表包含至少一个元素e,(o==null ? e==null : o.equals(e)),则List的contains方法返回true。

在您的情况下,它将比较2个String数组。 但是,array1.equals(array2)array1 == array2相同。

这意味着它将检查它是否是同一个数组。 要比较数组的内容,您需要以下内容:

Arrays.equals(array1, array2)

因此,list的contains方法不适合您的使用(即比较数组内容),而是java.util.Arrays的equals方法或类似方法。

答案 1 :(得分:0)

你需要确保字符串被剪裁和放大。使用类似于equalsIgnoreCase()的方法检查。基本上,实际内容&#39;没有在这些数组中检查 - 主要是body。重做这个阵列,修剪弦乐,创造一个新的阵列&amp;然后你就可以将它与item进行比较 - 在​​一个循环/传递中。

答案 2 :(得分:0)

对于你想要做的事情,我建议你在java中尝试deepEquals() https://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#deepEquals(java.lang.Object,%20java.lang.Object)

答案 3 :(得分:0)

来自Java文档

  

公共布尔包含(对象o)   如果此列表包含指定的元素,则返回true。更正式的,如果和,则返回true   只有当这个列表包含至少一个元素e时(o == null?   e == null:o.equals(e))。

为了保持简单(即使看起来不是很优雅),您应该按照以下方式更改代码:

$data = array(
      'alice' => 3,
      'ken' => 6,
      'wendy' => 9,
 );

但是,如果您只想打印项目是否存在(因此不执行其他操作),我建议您运行此代码:

public void readIncassiOLG(String filename, List<String []> itemsToCheck) {
    CSVReader reader = new CSVReader(new FileReader(filename), CSV_SEPARATOR);
    List<String []> body = reader.readAll();
    for (String[] item : itemsToCheck) {
        for (String[] bodyItem : body) {
            if ( Arrays.equals(bodyItem, item) ) {
                System.out.println("Item present");
            } else{
                System.out.println("Item not present");
            }
        }
    }
}

Buon divertimento!