问题描述
当我在调试和打印时检查字符串时,字符串是相同的,但 == 运算符和 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
}
}