.contains仅在硬编码时有效

yqhsw0fo  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(292)

这是我的第一篇文章,所以请让我知道,如果一些东西应该是不同的。
我一直在尝试创建一个方法,在二维数组列表中查找搜索项的索引。这是我想到的代码:

import java.util.List;

public class Searcher {
public static int Search(List<List<String>> csv, String term) throws TermNotFoundException{
    if (csv.get(0).contains(term)) {
        return csv.get(0).indexOf(term);
    }
    else {
        throw new TermNotFoundException("Term not found");
    }
}

我现在遇到的问题是,当我硬编码出现在我正在查看的arraylist中的搜索项时,它工作得非常好。当我尝试使用如上所示的term变量时,问题就出现了。
我正在查看的特定arraylist(csv.get(0))如下所示:
[日期时间\u utc,e1a,e1b,e1c,e2a,e2b,e3a,e3b,e3c,e3d,e4a,g1a,g2a,g2c,zon]
因此,如果我在“e1a”中硬编码,它将找到它并返回1。如果我在main方法中调用函数并为变量项填充相同的内容,这就行不通了。
有什么我不知道的吗?
编辑:为了详细说明,我不能透露完整的二维数组由于隐私的原因。不过,我可以给你更多的信息。
有些人建议不要搜索两次,因此我将代码更改如下:

import java.util.List;
public class Searcher {
public static int Search(List<List<String>> csv, String term) throws TermNotFoundException{
    System.out.println(csv.get(0));
    System.out.println(term);
    int result = csv.get(0).indexOf(term);
    if (result != -1){
        return result;
    }
    else {
        throw new TermNotFoundException("Term not found");
    }
}

同样的问题也会出现。包括一些调试行,输出如下:

[datetime_UTC, E1A, E1B, E1C, E2A, E2B, E3A, E3B, E3C, E3D, E4A, G1A, G2A, G2C, Zon]
E1A
TermNotFoundException: Term not found
at Searcher.Search(Searcher.java:12)
at Main.main(Main.java:10)

如果有帮助的话。这就是我调用函数的地方:

import java.io.FileNotFoundException;
import java.util.List;

public class Main {

public static void main(String[] args) throws FileNotFoundException {
    List<List<String>> csv = CSVReader.Read("standard_profiles.csv");
    try {
        System.out.println(Searcher.Search(csv, "E1A"));
    } catch (TermNotFoundException e) {
        e.printStackTrace();
    }
}
chhkpiq4

chhkpiq41#

public static void main(String[] args) throws Exception {
    List<String> list=new ArrayList<>();
    list.add("000");
    List<List<String>> listList=new ArrayList<>();
    listList.add(list);
    System.out.println(Search(listList, "000"));;
}

上面的代码返回0,我无法重现您的问题。然而,如果你的任期不在第一个名单上,它将不起作用 .get(0) 意味着你只搜索第一个 List 在你的 List<List>

相关问题