为了账号安全,请及时绑定邮箱和手机立即绑定

具有非紧凑字符串的 Java 紧凑字符串 equalsIgnoreCase 计算结果为 false

具有非紧凑字符串的 Java 紧凑字符串 equalsIgnoreCase 计算结果为 false

开满天机 2022-07-27 20:54:29
解析.csv文件时,我遍历文件的列标题并查看其中一个是否等于(忽略大小写)比较id:String comparand = "id";for (String header : headerMap.keySet()) {   if (header.equalsIgnoreCase(comparand)) {      recordMap.put("_id", csvRecord.get(header));   } else {      recordMap.put(header, csvRecord.get(header));   }}使用UTF-8字符集读取文件:Reader reader = new InputStreamReader(file.getInputStream(), StandardCharsets.UTF_8);我使用的 CSV 解析器库是Apache Commons CSV:CSVParser csvParser = CSVFormat.DEFAULT   .withDelimiter(delimiter)   .withFirstRecordAsHeader()   .withIgnoreEmptyLines()   .parse(reader);Map<String, Integer> headerMap = csvParser.getHeaderMap();不知何故,上面的equalsIgnoreCase()计算结果为falsewhile 两个字符串都有 value id。观察调试器显示该header值是一个非紧凑字符串 (UTF-16),而该comparand值是一个紧凑字符串(ASCII):这是默认行为还是错误?我怎样才能使equalsIgnoreCase评估达到true预期?
查看完整描述

1 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您的header值以UTF-16 BOMFFFE开头。读取 BOM 时剥离 BOM,header然后将其与comparand.



查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信