You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java双条件逻辑判断异常问题:Scanner读取CSV文件时输出为空求助

问题分析与解决

首先,咱们先揪出核心的逻辑问题——这正是输出为空的关键原因!

你的预期是仅过滤掉item等于args[1]且property1等于args[2]的行(比如示例中的最后一行pencil,YY,12),其余行都保留写入文件。但你当前写的条件:

if(!item.equals(args[1]) && !property1.equals(args[2]))

这个条件的实际含义是:只有当item不等于args[1],并且property1不等于args[2]的时候,才会写入该行。咱们对应你的示例参数(args[1]是"pencil",args[2]是"YY")逐行验证:

  • 第一行pencil,XX,10:item是"pencil",所以!item.equals(args[1])为false,整个条件不成立,不写入;
  • 第二行eraser,YY,rectangle:property1是"YY",!property1.equals(args[2])为false,整个条件不成立,不写入;
  • 第三行sharpener,YY,new:同上,property1是"YY",条件不成立,不写入;
  • 第四行pencil,YY,12:两个子条件都为false,条件不成立,不写入;

所有行都不满足条件,输出自然为空。

修正逻辑条件

你需要把条件改成排除掉item等于args[1]且property1等于args[2]的行,也就是反向判断,有两种等价写法:

写法一(直接反向原过滤条件):

// 只要不是「item匹配参数且property1匹配参数」的行,就写入
if(!(item.equals(args[1]) && property1.equals(args[2]))) {
    printWriter.println(item + "," + property1 + "," + property2);
}

写法二(用逻辑或表达保留规则):

// 只要item不匹配参数,或者property1不匹配参数,就写入
if(!item.equals(args[1]) || !property1.equals(args[2])) {
    printWriter.println(item + "," + property1 + "," + property2);
}

这两种写法都能实现你的预期:只有当item和property1同时匹配参数时才过滤,其余行全部保留。

额外注意:Scanner的分隔符问题

虽然你说验证了匹配正常,但还是要提醒一个容易踩的坑:CSV文件用逗号分隔,而默认情况下Scanner的分隔符是空白字符(空格、换行等),如果没手动设置分隔符,scanner.next()会把整行内容当成一个字符串读取,这会导致字段匹配失败。建议初始化Scanner后设置正确的分隔符:

Scanner scanner = new Scanner(new File("你的CSV文件路径"));
// 设置分隔符为逗号或者换行符,确保能正确读取每个字段
scanner.useDelimiter(",|\n");

这样就能保证item、property1、property2分别读取到每一行的三个字段啦。


内容的提问来源于stack exchange,提问作者ZephyrX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:47:45