Java 两个相同的字符串不相等(不是指针/引用错误)

Java 两个相同的字符串不相等(不是指针/引用错误),java,string,equals,Java,String,Equals,我从文件中读到一行: KatalogObrazków 1 32 意味着我应该在以下位置查找数据: C:\Users\NAME_OF_THE_USER/KatalogObrazków 所以我就这么做了,但是有可怕的事情发生了。在splitLine[0]中,我有一个单词“katalogbrazków”,但是计算机说“katalogbrazków”。equals(splitLine[0])为false,在拆分行之后,splitLine[0]周围没有空格。请看下面的代码 BufferedRea

我从文件中读到一行:

KatalogObrazków 1 32

意味着我应该在以下位置查找数据:

C:\Users\NAME_OF_THE_USER/KatalogObrazków
所以我就这么做了,但是有可怕的事情发生了。在
splitLine[0]
中,我有一个单词
“katalogbrazków”
,但是计算机说
“katalogbrazków”。equals(splitLine[0])
为false,在拆分行之后,splitLine[0]周围没有空格。请看下面的代码

    BufferedReader br = new BufferedReader(new FileReader(path));
    String line;
    String[] splitLine;
    if ((line = br.readLine()) != null) {
        splitLine = line.split(" ");
        System.out.println(splitLine[0]);//1st line of output
        System.out.println("KatalogObrazków".equals(splitLine[0]));//these are not EQUAL!!!!!??? WHY?
        imageDirectoryPath = System.getProperty("user.home")+"/" + splitLine[0];
        System.out.println(new File(imageDirectoryPath).exists());
        delay = Integer.parseInt(splitLine[1]);
        fontSize = Integer.parseInt(splitLine[2]);
    }
    br.close();
输出:

KatalogObrazków
false
false
C:\Users\R/KatalogObrazków
编辑:

我明白了:

65279 75 97 116 97 108 111 103 79 98 114 97 122 107 243 119 
75 97 116 97 108 111 103 79 98 114 97 122 107 243 119 

您可能在文件开头遇到了UTF-BOM


它是不可见的,因为大多数编辑器都将其隐藏。非常邪恶,是吗?

如果使用正确的编码方式使用
getBytes()
,那么这两种方法得到的字节数组是否相同?它们可能是不可见的字符。请尝试转储两个字符串中每个字符的整数值,以了解差异的位置:
for(char c:s.tocharray())System.out.println((int)c)@JBNizet我发布了编辑。是的,开头有一个看不见的数字。问题是我不确定将来会使用什么编码,但可能是UTF-8。我的工作区也是UTF-8。System Windows 8.1“不可见数字”是一个字节顺序标记(0xFEFF),通常应视为空白。这是一个BOM表。我不知道是谁想出了在文件开头添加BOM表的糟糕主意。你最好把它取下来。好的编辑器允许保存没有BOM表的UTF8文件。包括两个答案和可行的解决方案。谢谢Asah和@Paul Hicks!你救了我一天!
65279 75 97 116 97 108 111 103 79 98 114 97 122 107 243 119 
75 97 116 97 108 111 103 79 98 114 97 122 107 243 119