[英]Having problem when comparing two strings
我正在使用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真我真的不知道为什么。 这两个添加看起来完全一样。
这是我的csv文件的样子: 在此处输入图片描述
有(至少)4个原因,当您显示/打印它们时,两个看起来“看起来”相同的字符串可能会变得不相等:
如果使用==
而不是equals(Object)
比较字符串,则通常会得到错误的答案。 (这里不是问题,因为您正在使用equals
方法。但是,这是一个常见问题 。)
一个字符串上出现意外的前导或结尾空格字符。 这些可以使用trim()
删除。
其他前导,尾随或嵌入式控制字符或Unicode“ funky”字符。 例如,杂散的Unicode BOM (字节顺序标记)字符。
象形文字 。 有许多示例,其中使用相同或实际上相同的字形在屏幕上呈现两个或更多不同的Unicode代码点。
情况3和4只能通过使用跟踪记录或调试器来检查两个字符串中的长度和char
值来可靠地检测到。
(CSV文件的屏幕截图无法帮助我们进行诊断!将CSV文件剪切并粘贴可能会有所帮助。)
您应该从第一个元素中删除双引号,然后使用equals方法进行检查。
尝试这个:
String operation = operation.substring(1, to.length() - 1);
operation.equals("add")
希望对你有效。
看起来您的图像线条看起来不错。 我想在这种情况下,您可能会设置错误的文档编码。 例如,当您不输入UTF时,则在开头有特殊的标头。 这可能是原因,您不正确地读了第一个单词。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.