Java 程序在执行之前挂起

Java program hangs when executed when it didn't before

当我运行这个程序挂了,是不是和代码有关?因为如果是这样,我就无法发现错误。

public class PalindromeSolution {
    public static void main(String [] args) {
        String [] arr;
        String s1 = "taco cat";
        boolean palindrome = true;

        s1 = s1.replaceAll("\s", "");
        arr = s1.split("(?!^)");

        int i = 0;
        while(i < arr.length) {
            if(arr[i] == arr[(arr.length - 1) - i]) {
                i++;
            } else {
                palindrome = false;
                break;
            }   
        }
        System.out.println("Is palindrome: " + palindrome);
    }
}

它不适合我。但这是不正确的, 因为你不应该将字符串与 == 进行比较, 你应该使用 .equals()。 通过此更改,它将 运行 正确:

    if(arr[i].equals(arr[(arr.length - 1) - i])) {

...虽然很差:

  • 为什么拆分成字符串?最好使用 s1.toCharArray()
  • 为什么要迭代到 arr.lengtharr.length / 2 就够了
  • for 循环比 while 循环更自然

像这样:

    String s1 = "taco cat";
    boolean palindrome = true;

    s1 = s1.replaceAll("\s", "");
    char[] arr = s1.toCharArray();

    for (int i = 0; i < arr.length / 2; ++i) {
        if (arr[i] != arr[(arr.length - 1) - i]) {
            palindrome = false;
            break;
        }
    }
    System.out.println("Is palindrome: " + palindrome);

您可以使用 StringBuffer 以保持代码简单:

s1 = s1.replaceAll("\s", "");
StringBuffer str2=new StringBuffer(s1);
str2.reverse();
if(str2.toString().equals(s1))
     return true;
else 
     return false