[英]jvm comparing String with StringBuffer.reverse() always fails
我有一个问题,我要找到他所有回文字符串的子字符串。 输入将始终为1个字。 测试输入为aabaa。 我决定尝试聪明一些,并为我的子字符串创建一个字符串缓冲区,然后使用反向方法与使用String.equals的原始字符串进行比较。 没用
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)
}
}
}
}
}
当我取消注释第一条打印语句时,使用测试输入aabaa的输出如下所示
a
aa
aab
aaba
aabaa
ab
aba
abaa
b
ba
baa
所以我得到正确的子字符串,但是最后一个if语句永远不会解析为true,我也不知道为什么会这样。
sub
是一个字符串。 rev
是一个StringBuffer。 它们不能相等,因为它们甚至没有相同的类型。
补充笔记:
for (i in 0..input.length - 1)
可以写for (i in 0 until input.length)
,这更优雅 input.substring(i, i + j)
可能不正确:在两个循环的末尾,i为length-1,j为length-1,因此您将在length-1之间采用一个子字符串和2 *长度-2。 a == b
来测试a是否等于b。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.