我正在使用Java阅读CSV文件。在文件内部,每一行都采用以下格式:
operation, start, end.
我需要对不同的输入执行不同的操作。但是,当我尝试比较两个字符串时,发生了一些奇怪的事情。
我用等于来比较两个字符串。其中一个操作是“添加”,但是我从文档中提取的第一个元素总是给我错误的答案。我知道这是一个“添加”,我将其打印出来看起来像是“添加”,但是当我使用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"));
例如,它打印出来了 加1 3 假 加4 6 真正 我真的不知道为什么。这两个 add 看起来完全一样。
这是我的csv文件的样子: enter image description here
答案 0 :(得分:1)
(至少)有四个原因使当您显示/打印时看起来像它们的两个字符串相同的两个字符串可能证明是不相等的:
如果使用==
而不是equals(Object)
比较字符串,则通常会得到错误的答案。 (这里不是问题,因为您正在使用equals
方法。但是,这是common problem。)
一个字符串上出现意外的前导或尾随空格字符。可以使用trim()
将其删除。
其他前导,尾随或嵌入式控制字符或Unicode“ funky”字符。例如,杂散的Unicode BOM(字节顺序标记)字符。
Homoglyphs。有许多示例,其中使用相同或实际上相同的字形在屏幕上呈现两个或更多不同的Unicode代码点。
只有通过使用跟踪记录或调试器来检查两个字符串中的长度和char
值,才能可靠地检测到情况3和4。
(CSV文件的屏幕快照无法帮助我们诊断这一点!剪切并粘贴CSV文件可能帮助。)
答案 1 :(得分:0)
您应该从第一个元素中删除双引号,然后使用equals方法进行检查。
尝试一下:
String operation = operation.substring(1, to.length() - 1);
operation.equals("add")
希望它对您有用。
答案 2 :(得分:0)
图像中的线条看起来不错。我想在这种情况下,您可能会设置错误的文档编码。例如。如果您不输入UTF,则在开头有特殊的标头。这可能是一个原因,为什么您错误地读了第一个单词。