Java回文检查 - 案例不敏感

时间:2016-09-08 21:10:53

标签: 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!");
        }
    }   
}

当输入类似&#34; Os SO&#34;的字符串时,输出不正确,因为该字符串未报告为回文结构。 该问题似乎与空格相关,因为如果没有空格,则将相同的字符串正确报告为回文。 我非常有兴趣了解这段代码的缺陷,非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

使用console.nextLine()代替console.next()

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

在检查回文时,更容易反转字符串并检查反向字符串是否与原始字符串相等,而不是使用索引来检查字符串中的每个字符。

答案 1 :(得分:0)

这是我解决问题的方法:

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();
    }
}