为什么 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
}
}
一个字符串来自文件,另一个用双引号初始化。
当我在调试和打印时检查它们时,字符串是相同的,但是 == 运算符和 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
}
}