Java解析CSV布尔字段时true被解析为false问题求解
错误核心原因
你误用了Boolean.getBoolean()方法,该方法的作用不是将字符串格式的布尔值转为boolean类型,而是以入参为键,读取JVM系统属性对应的布尔值,没有找到对应系统属性时默认返回false。你传入字符串"true"时,方法会查找名为"true"的系统属性,不存在自然就返回false,这就是你所有原值为true的字段解析后变成false的原因。
正确解析方案
将字符串转为布尔值应该使用Boolean.parseBoolean(String s)方法,该方法会忽略大小写判断输入字符串是否等于"true",匹配则返回true,其余情况均返回false,完全适配你的CSV解析场景。
你提到的Boolean.valueOf(String s)也可实现相同效果,区别是该方法返回Boolean包装类对象,本质内部也是调用Boolean.parseBoolean实现转换。
验证示例:
// 错误用法演示 System.out.println(Boolean.getBoolean("true")); // 输出false(无对应系统属性时) // 正确用法演示 System.out.println(Boolean.parseBoolean("true")); // 输出true System.out.println(Boolean.parseBoolean("false")); // 输出false
偶发"正常"的原因
你观察到部分字段返回值看起来随机,是因为当你传入的字符串刚好是已存在的系统属性名时,Boolean.getBoolean()会返回该系统属性的实际布尔值,和你CSV中的字段值完全无关,所以呈现出随机取值的现象。
内容的提问来源于stack exchange,提问作者VladScv
相关产品推荐
相关产品推荐

