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

解析.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):

http://img1.mukewang.com/62e1359d00015ef901860319.jpg

这是默认行为还是错误?我怎样才能使equalsIgnoreCase评估达到true预期?



开满天机
浏览 123回答 1
1回答

繁花不似锦

您的header值以UTF-16 BOMFFFE开头。读取 BOM 时剥离 BOM,header然后将其与comparand.
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java