为什么 kotlin == operator returns false 对于看起来完全一样的字符串?

Why kotlin == operator returns false for strings that look exactly the same?

一个字符串来自文件,另一个用双引号初始化。

当我在调试和打印时检查它们时,字符串是相同的,但是 == 运算符和 equals 方法在比较字符串时都 return 错误。

我开始逐个字符地比较字符串。 此函数 returns 字符串不同的第一个位置,如果相同则为 -1。

private fun characterCompare(lhs: String, rhs: String): Int {
    var i = 0
    while (i < lhs.length && i < rhs.length) {
        val lchar = lhs[i]
        val rchar = rhs[i]

        if (lchar != rchar) {
            return i // I set a breakpoint here to take a look at the values
        }
        i++
    }
    return if (i < lhs.length || i < rhs.length) i else -1
}

...在我的特殊情况下,问题是来自文件的字符串在开头包含一个 UTF8 字节顺序标记 (BOM),在显示字符串时从未出现。

此函数删除 BOM(如果存在):

private const val UTF8_BOM = "\uFEFF"
private fun removeUTF8BOM(str: String): String {
    return if (str.startsWith(UTF8_BOM)) {
        str.substring(1)
    } else {
        str
    }
}