我正在尝试检查另一个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)是从第一个文件过滤的行,我检查了两个文件中都有一行,但是下面的方法打印我总是“项目不存在”。
有关于此的任何建议吗?
答案 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!