解析.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
预期?
繁花不似锦
相关分类