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

标签 java palindrome

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

这是我的代码:

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() 仅收集下一个以空格分隔的标记,因此当您输入“Os SO”时,它实际上仅将“Os”存储到String s 变量。

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

关于Java 回文检查器 - 不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39400265/

相关文章:

java - 具有多个文件附加器的 Log4j2 json 配置

java - 如何对 java 文本文件进行排序以获得中位数?

python - 找到最大回文的最快算法,该回文是具有相同位数的 2 个数字的乘积

java - 如何从多个 GUI 类集成多页 Java 桌面应用程序

java 使用 for 循环将数据添加到 JTable

java - A*寻路算法。运动成本和启发式不准确

java - 在数组列表中搜索回文数。如果列表中存在回文数,则返回其大小

python - 最大的三位数回文积

python - 为什么代码创建的列表不包含大于 99,999 的值 (Python)

java - java回文错误