Java 回文检查器 - 不区分大小写

Java palindrome checker - Case Insensitive

我目前正在尝试在 Java 中编写一个不区分大小写的回文检查器。 我检查了其他主题,但其中 none 似乎解决了我的问题。

这是我的代码:

import java.util.Scanner;

public class Homework5_2 {
    public static void main(String[] args) {
        boolean flag = true; //palindrome or not
        Scanner console = new Scanner(System.in);
        System.out.print("Enter one or more words: ");
        String s = console.next();

        //checks if string contains spaces
        if (s.matches(".*\s+.*")) {
            s = s.replaceAll("\s+","");
        }

        s = s.toLowerCase();
        int stringLength = s.length();
        int index = 0;

        //checks the string from both sides going towards the middle
        for (int i=0;i<stringLength/2;i++) {
        index = stringLength-i-1;
        if (!(s.charAt(i) == s.charAt(index))) {
            flag = false;
            }
        }

        if (flag == true) {
            System.out.println("The string is a palindrome!");
        } else {
           System.out.println("The string is not a palindrome!");
        }
    }   
}

当输入像 "Os SO" 这样的字符串时,输出不正确,因为该字符串未报告为回文。 这个问题似乎与空格有关,因为如果其中没有空格,相同的字符串会被正确地报告为回文。 我真的很想了解这段代码的缺陷,非常感谢任何帮助!

使用 console.nextLine() 而不是 console.next()

默认情况下,console.next() 仅收集下一个 space 分隔的标记,因此当您输入 "Os SO" 时,它实际上只是将 "Os" 存储到 String s变量。

在检查回文方面,反转字符串并检查反转字符串是否等于原始字符串比使用索引检查字符串中的每个字符要容易得多。

这是我对问题的解决方案:

import java.util.Scanner;

public class CheckPalindrome {

    public static void main(String[] args) {
        Scanner console = new Scanner(System.in);
        String userInput = "";
        String auxiliar = "";

        userInput = console.nextLine();
        auxiliar = new StringBuilder(userInput).reverse().toString();

        if (userInput.equalsIgnoreCase(auxiliar)) {
            System.out.println("This string is a palindrome");
        } else {
            System.out.println("This string is not a palindrome");
        }

        console.close();
    }
}