Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jvm将字符串与StringBuffer.reverse()进行比较总是失败_Java_String_Kotlin - Fatal编程技术网

Java jvm将字符串与StringBuffer.reverse()进行比较总是失败

Java jvm将字符串与StringBuffer.reverse()进行比较总是失败,java,string,kotlin,Java,String,Kotlin,我遇到了一个问题,我需要找到一个字符串中所有回文的子字符串。输入将始终为1个单词。测试输入为aabaa。我决定试着聪明一点,为我的子字符串创建一个字符串缓冲区,然后使用reverse方法与使用string.equals的原始字符串进行比较。它不起作用 import java.util.* fun main(args: Array<String>) { val scan = Scanner(System.`in`) val input = scan.next()

我遇到了一个问题,我需要找到一个字符串中所有回文的子字符串。输入将始终为1个单词。测试输入为aabaa。我决定试着聪明一点,为我的子字符串创建一个字符串缓冲区,然后使用reverse方法与使用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)
                }
            }
        }
    }
}
所以我得到了正确的子字符串,但最后一个if语句从未解析为true,我不知道这是为什么。

sub是一个字符串。rev是一个StringBuffer。它们不可能相等,因为它们甚至没有相同的类型

补充说明:

不要使用StringBuffer。使用StringBuilder。StringBuffer是不必要的同步,不应该再使用它,就像Vector不应该被使用,ArrayList应该被使用一样。 对于0中的i..input.length-1可以为0中的i编写,直到input.length更优雅为止 input.substringi,i+j不可能是正确的:在两个循环的末尾,i的长度为-1,j的长度为-1,因此您将取长度为-1和2*length-2之间的子字符串。 要存储唯一的结果,请使用哈希集,而不是ArrayList。在哈希集上调用contains是O1,而在ArrayList上调用contains。 在Kotlin中,与Java不同,您可以使用a==b来测试a是否等于b,即使a和b是引用。 sub是一个字符串。rev是一个StringBuffer。它们不可能相等,因为它们甚至没有相同的类型

补充说明:

不要使用StringBuffer。使用StringBuilder。StringBuffer是不必要的同步,不应该再使用它,就像Vector不应该被使用,ArrayList应该被使用一样。 对于0中的i..input.length-1可以为0中的i编写,直到input.length更优雅为止 input.substringi,i+j不可能是正确的:在两个循环的末尾,i的长度为-1,j的长度为-1,因此您将取长度为-1和2*length-2之间的子字符串。 要存储唯一的结果,请使用哈希集,而不是ArrayList。在哈希集上调用contains是O1,而在ArrayList上调用contains。 在Kotlin中,与Java不同,您可以使用a==b来测试a是否等于b,即使a和b是引用。 请注意,如果按照建议使用集合,则不需要像if!found.containssub{found.addsub;…},因为您可以使用iffound.addsub{…}。此外,如果要比较内容,不需要插入toString。就用吧。由于您只想打印它,并且只有当两个对象相等时,才可以使用ifsub.contentequalstringbuffersub.reverse{printlnsub;}注意,如果您使用建议的集合,则不需要像if!found.containssub{found.addsub;…},因为您可以使用iffound.addsub{…}。此外,如果要比较内容,不需要插入toString。就用吧。因为您只想打印它,并且只有当两个对象相等时,才可以使用ifsub.contentequalstringbuffersub.reverse{printlnsub;}
a
aa
aab
aaba
aabaa
ab
aba
abaa
b
ba
baa