[英]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.