为什么 kotlin == 运算符对于看起来完全相同的字符串返回 false?

问题描述

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

当我在调试和打印时检查字符串时,字符串是相同的,但 == 运算符和 equals 方法在比较字符串时都返回 false。

解决方法

我开始逐个字符地比较字符串。 此函数返回字符串不同的第一个位置,如果相同,则返回 -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
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...