java jvm正在将字符串与StringBuffer进行比较。reverse()总是失败
我遇到了一个问题,我需要找到一个字符串中所有回文的子字符串。输入将始终为1个单词。测试输入为aabaa。我决定尝试聪明一点,为我的子字符串创建一个字符串缓冲区,然后使用反向方法与原来使用的字符串进行比较。等于。它不起作用
import java.util.*
fun main(args: Array<String>) {
val scan = Scanner(System.`in`)
val input = scan.next()
val found = ArrayList<String>()
for (i in 0..input.length - 1) {
for (j in 0..input.length - i) {
val sub = input.substring(i, i + j)
if (!found.contains(sub)) {
// println(sub)
found.add(sub)
val rev = StringBuffer(sub).reverse()
if (sub.equals(rev)) {
println(rev)
}
}
}
}
}
当我取消对第一个print语句的注释时,使用测试输入aabaa输出如下
a
aa
aab
aaba
aabaa
ab
aba
abaa
b
ba
baa
所以我得到了正确的子字符串,但是最后一个if语句从未解析为true,我不知道这是为什么
# 1 楼答案
sub
是一个字符串rev
是一个StringBuffer。它们不可能相等,因为它们甚至没有相同的类型补充说明:
for (i in 0..input.length - 1)
可以写成for (i in 0 until input.length)
更优雅input.substring(i, i + j)
不可能是对的:在两个循环的末尾,我的长度是-1,j的长度是-1,因此您将在长度-1和2*length-2之间取一个子字符串李>a == b
测试a是否等于b,即使a和b是引用李>