Java 字符串比较导致不正确的结果

Java 字符串比较导致不正确的结果,java,Java,我有一个写在文件中的路径URL。我使用Scanner类记录该URL并将其输出到字符串变量“s”。然后使用.equals()方法将其与“gameDataFile”文件对象中的路径URL进行比较。结果为false,尽管它们与我的控制台中记录的字符串相同。这里发生了什么 文件中的路径URL: src\gameData\character_data.csv 代码段: String s = in.next(); // in is a java.util.Sca

我有一个写在文件中的路径URL。我使用Scanner类记录该URL并将其输出到字符串变量“s”。然后使用.equals()方法将其与“gameDataFile”文件对象中的路径URL进行比较。结果为false,尽管它们与我的控制台中记录的字符串相同。这里发生了什么

文件中的路径URL:

src\gameData\character_data.csv
代码段:

String s = in.next();                       // in is a java.util.Scanner object
System.out.println(gameDataFile.getPath()); // gameDataFile is a java.io.File object
System.out.println(s);
System.out.println(s.equals(gameDataFile.getPath()));
控制台输出:

src\gameData\character_data.csv
src\gameData\character_data.csv
false
'src\gameData\character_data.csv'
'
false
编辑:根据@MTilsted的请求,以下代码段

String s = in.next();
System.out.println("'" + gameDataFile.getPath() + "'");
System.out.println("'" + s + "'");
System.out.println(s.equals(gameDataFile.getPath()));
控制台输出中的结果:

src\gameData\character_data.csv
src\gameData\character_data.csv
false
'src\gameData\character_data.csv'
'
false
它似乎已将URL替换为一个单引号,请尝试以下操作:

String s = in.next();                       // in is a java.util.Scanner object
System.out.println("'" + gameDataFile.getPath() + "'"); // gameDataFile is a java.io.File object
System.out.println("'" + s + "'");
System.out.println(s.equals(gameDataFile.getPath()));

默认情况下,windows中的utf8文件在文件开头有一个BOM表(字节顺序标记)。它是无形的,但它确实存在。我认为这会导致两个字符串不同,即使它们看起来相同。

多亏了@VGR,问题在于字符串“s”包含一个附加的“回车”字符(ascii代码13)。

在单引号之前添加一个反斜杠

尝试更改System.out.println(s);到System.out.println(““+s+””);(并对gameDataFile.getPath()执行相同的操作。听起来其中一个有一个空格将“System.out.println(s)”更改为“System.out.println(““+s+”””)”将相应的输出更改为仅一个单引号。这是如何发生的?这意味着什么?可能存在难以看到的前导/尾随空格。
s.compareTo(gameDataFile.getPath())是什么
return?返回
0
表示它们相等。引号输出使我相信
s
以回车字符
'\r'
结尾。请尝试打印
s.endsWith(“\r”)
。控制台输出以下内容:“src\gameData\character\u data.csv”询问者已对此进行检查。未找到BOM表。