Java 如何使用子字符串而不是字符检查单词是否为回文?

Java 如何使用子字符串而不是字符检查单词是否为回文?,java,string,substring,character,Java,String,Substring,Character,我刚刚意识到我的错误 而不是写作 test1=do.substring(x,x+1); test2=do.substring(count-1-x,count-x); 我写 test1=do.substring(x,x+1); test1=do.substring(count-1-x); 我没有意识到必须“结束”子字符串,我使用了这个答案。考虑到它的支持率,我想知道是否有人能解释为什么它在我的案例中不起作用 尝试将字符串转换为charArray,然后定义从数组开始到数组结束的索引,并相互比较:

我刚刚意识到我的错误

而不是写作

test1=do.substring(x,x+1);
test2=do.substring(count-1-x,count-x);
我写

test1=do.substring(x,x+1);
test1=do.substring(count-1-x);

我没有意识到必须“结束”子字符串,我使用了这个答案。考虑到它的支持率,我想知道是否有人能解释为什么它在我的案例中不起作用

尝试将字符串转换为
charArray
,然后定义从数组开始到数组结束的索引,并相互比较: 如果它们总是一样的话,那就是回文,否则就不是了

String input = "POP";
char [] values = input.toCharArray();
boolean isPalindrome = true;

for (int i = 0, j = values.length-1; i < values.length /2 && j >= values.length/2; i++, j--) {
    if(values[i] != values[j]) {
        isPalindrome = false;
        break;
    }
}
if(isPalindrome) {
    System.out.println(input + " is a Palindrom");
} else {
    System.out.println(input + " is not a Palindrom");
}
String input=“POP”;
char[]value=input.toCharArray();
布尔值isAlindrome=true;
对于(int i=0,j=values.length-1;i=values.length/2;i++,j--){
如果(值[i]!=值[j]){
isAlindrome=false;
打破
}
}
if(isPalindrome){
System.out.println(输入+“是回文”);
}否则{
System.out.println(输入+“不是回文”);
}

我认为在使用子字符串时不需要迭代字符串。您可以简单地将左子字符串与反转的右子字符串进行比较,如下所示:

private静态布尔值isAlindrome(最终字符串输入){
int length=input.length();
int middleIndex=(长度%2==0)?
(长度/2):(长度/2+1);
String left=input.substring(0,长度/2);
String right=input.substring(中间索引,长度);
//比较左字符串与反字符串(右)
返回left.equals(新的StringBuilder(右).reverse().toString());
}

下面引用的是对以下各项的描述:

返回作为此字符串的子字符串的新字符串。子串 从指定的beginIndex开始,并延伸到 索引endIndex-1。因此,子字符串的长度是 endIndex beginIndex

因此,为了使用
string#substring(int-beginIndex,int-endIndex)
获得一个只有一个字符的字符串,
endIndex
的值需要等于
beginIndex+1
,例如
“Hello”。子字符串(1,2)
相当于
string.valueOf(“Hello.charAt(1))

演示:

public class Main {
    public static void main(String[] args) {
        // Test strings
        String[] arr = { "dad", "malayalam", "papa" };
        for (String s : arr) {
            System.out.println(isPallindrome(s));
        }
    }

    static boolean isPallindrome(String s) {
        int len = s.length();
        for (int i = 0; i < len / 2; i++) {
            if (!s.substring(i, i + 1).equals(s.substring(len - i - 1, len - i))) {
                return false;
            }
        }
        return true;
    }
}
true
true
false

更新:我这样做是为了让循环为每个字符打印匹配/不匹配。我看到第一个循环匹配,但是第二个和第三个字符没有匹配。我使用了输入“pop”。这是我得到的:pop匹配。诺马奇。诺马奇。这不是回文。不确定是否允许您使用它,但您可以将输入一分为二,然后查看它们是否相等。拆分时只需注意奇数长度的字符串。我一定会尝试学习更多关于stringbuilder的个人使用,但遗憾的是,这是一门HS compsci课程,只针对一个你会使用的例子?