无法弄清楚如何检查来自一个字符串数组的单词是否在另一个字符串数组中。这就是我到目前为止所做的:
FileInputStream fis = new FileInputStream("TranHistory.csv");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
CSVReader reader = new CSVReader(isr);
String[] groceries = new String[]{"albertsons", "costco"};
for (String[] cols; (cols = reader.readNext()) != null;) {
if(cols[4].toLowerCase().contains(groceries)){
System.out.print(cols[4]);
}
}
上面的代码目前给我一个错误,因为.contains()不能应用于String Array。这仅在我将if语句更改为此时才有效:
if(cols[4].toLowerCase().contains("albertsons")){
System.out.print(cols[4]);
}
我的问题是String []杂货会有很多杂货店,所以我认为比较String [] col和String []杂货是最有效的方法,我只是在实施它时遇到了麻烦。
解决方案:
我想通了......你必须做一个嵌套的for循环。这就是我所做的:
String[] groceries = {"albertsons", "costco"};
for (String[] cols; (cols = reader.readNext()) != null;) {
for (int i = 0; i < groceries.length; i++){
if(cols[4].toLowerCase().contains(groceries[i]))
{
System.out.print(cols[4]);
}
}
}
答案 0 :(得分:2)
我建议您创建一个包含您计划拥有的所有杂货的Set<String>
:
Set<String> groceries = Set.of("albertsons", "costco");
for (String[] cols; (cols = reader.readNext()) != null;) {
if (groceries.contains(cols[4].toLowerCase()){
System.out.print(cols[4]);
}
}
在Set
中搜索不会像使用数组那样采用线性时间。
正如YCF_L和我在下面的评论中解释的那样,您可以使用以下命令初始化Java 8中的Set
:
Set<String> groceries = new HashSet<>(Arrays.asList("albertsons", "costco"));
答案 1 :(得分:0)
我通常会通过Hashset执行此操作,因为它会在恒定时间而不是线性时间内搜索元素。因此,您可以使用此代码进行搜索。我假设您希望在找到文件时打印整个原始数组。
FileInputStream fis = new FileInputStream("TranHistory.csv");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
CSVReader reader = new CSVReader(isr);
String[] groceries = new String[]{"albertsons", "costco"};
Set<String> grocerySet = Arrays.stream(groceries).collect(Collectors.toSet());
System.out.println(grocerySet);
for (String[] cols; (cols = reader.readNext()) != null;) {
Set<String> smallGrocerySet = Arrays.stream(cols).collect(Collectors.toSet());
if(grocerySet.containsAll(smallGrocerySet)){
System.out.println(Arrays.toString(cols));
}
}