我正在使用 Java 读取 CSV 文件。在文件中,每一行的格式如下:operation, start, end.我需要为不同的输入做不同的操作。但是当我试图比较两个字符串时发生了一些奇怪的事情。我用equals来比较两个字符串。其中一个操作是“添加”,但我从文档中获取的第一个元素总是给我错误的答案。我知道这是一个“添加”,我打印出来它看起来像一个“添加”,但是当我使用 时operation.equals("add"),它是false. 对于所有其余的字符串,除了第一个之外,它都是正确的。CSV 文件的第一行有什么特别之处吗?这是我的代码:while ((line = br.readLine()) != null) { String[] data = line.split(","); String operation = data[0]; int start = Integer.parseInt(data[1]); int end = Integer.parseInt(data[2]); System.out.println(operation + " " + start + " " + end); System.out.println(operation.equals("add"));例如,它打印出 add 1 3 false add 4 6 true 我真的不知道为什么。这两个添加看起来完全一样。
3 回答
RISEBY
TA贡献1856条经验 获得超5个赞
(至少)有 4 个原因说明为什么显示/打印它们时“看起来”相同的两个字符串可能会变成不相等:
如果您使用
==
而不是比较字符串equals(Object)
,那么您通常会得到错误的答案。(这不是这里的问题......因为您正在使用该equals
方法。但是,这是一个常见的问题。)一个字符串上出现意外的前导或尾随空白字符。这些可以使用删除
trim()
。其他前导、尾随或嵌入的控制字符或 Unicode“时髦”字符。例如杂散的 Unicode BOM(字节顺序标记)字符。
同形字。有许多示例使用相同或几乎相同的字形在屏幕上呈现两个或多个不同的 Unicode 代码点。
情况 3 和 4 只能通过使用跟踪打印或调试器检查char
两个字符串中的长度和值来可靠地检测到。
(CSV 文件的屏幕截图无法帮助我们诊断此问题!CSV 文件的剪切和粘贴可能会有所帮助。)
慕姐8265434
TA贡献1813条经验 获得超2个赞
您应该从第一个元素中删除双引号,然后使用 equals 方法进行检查。
尝试这个:
String operation = operation.substring(1, to.length() - 1); operation.equals("add")
希望对你有效。
SMILET
TA贡献1796条经验 获得超4个赞
看起来您在图像中的线条看起来不错。我想在这种情况下,您可能会设置错误的文档编码。例如,当 UTF 时,你不放它,那么开头就有特殊的标题。这可能是您错误阅读第一个单词的原因。
添加回答
举报
0/150
提交
取消