繁体   English   中英

比较两个字符串时遇到问题

[英]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个原因,当您显示/打印它们时,两个看起来“看起来”相同的字符串可能会变得不相等:

  1. 如果使用==而不是equals(Object)比较字符串,则通常会得到错误的答案。 (这里不是问题,因为您正在使用equals方法。但是,这是一个常见问题 。)

  2. 一个字符串上出现意外的前导或结尾空格字符。 这些可以使用trim()删除。

  3. 其他前导,尾随或嵌入式控制字符或Unicode“ funky”字符。 例如,杂散的Unicode BOM (字节顺序标记)字符。

  4. 象形文字 有许多示例,其中使用相同或实际上相同的字形在屏幕上呈现两个或更多不同的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM