我正在用java读取一个csv文件。在文件中,每行的格式如下:
operation, start, end.
我需要为不同的输入做不同的操作。但是当我试着比较两条弦的时候发生了一些奇怪的事情。
我用equals来比较两个字符串。其中一个操作是“add”,但是我从文档中获取的第一个元素总是给我错误的答案。我知道这是一个“添加”,我把它打印出来,它看起来像一个“添加”,但当我使用 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"));
例如,它打印出add1 3 false add4 6 true,我真的不知道为什么。这两个加法看起来完全一样。
我的csv文件是这样的:在这里输入图像描述
3条答案
按热度按时间zujrkrfu1#
应该从第一个元素中删除双引号,然后使用equals方法进行检查。
试试这个:
希望对你有用。
7fhtutme2#
看起来你在图像中的线条看起来不错。我想在这种情况下,您可能会设置错误的文档编码。e、 当utf,你不把它,那么是有特殊的头开始。这可能是你读错第一个单词的原因。
xxslljrj3#
显示/打印两个“看起来”相同的字符串时,可能会出现不相等的情况,原因(至少)有4个:
如果你用
==
而不是equals(Object)
,那么你经常会得到错误的答案(这不是问题所在。。。既然你用的是equals
方法。但是,这是一个常见的问题。)一个字符串上出现意外的前导或尾随空格字符。这些可以使用
trim()
.其他前导、尾随或嵌入的控制字符或unicode“时髦”字符。例如,unicode bom(字节顺序标记)字符。
同形文字。有许多示例,其中两个或多个不同的unicode代码点在屏幕上使用相同或几乎相同的glyph呈现。
只有使用traceprints或调试器来检查长度和长度,才能可靠地检测到情况3和4
char
两个字符串中的值。(csv文件的屏幕截图不能帮助我们诊断这个问题!剪切并粘贴csv文件可能会有所帮助。)