Palindrome跳过不是字母的东西,不关心upp / lower case

时间:2017-10-22 16:06:44

标签: java

我的目标是创建一个代码,用于检查单词是否属于回文,同时跳过不是字母的所有内容,也不会考虑大小写的情况。  我需要坚持我的方法,不能使用高级命令,即使我确信有更好的方法来编写这段代码。 问题在于变量" a"和" b"永远不会改变,并一遍又一遍地检查同一件事。

public static void main(String[] args) {

    String palindrom = "*0Anna'/";

    boolean jeto = false;

    for (int i = 0; i < palindrom.length() / 2; i++) {

        int j = palindrom.length() - 1 - i; // right side
        int a = palindrom.charAt(i); // left side defined by charAt
        int b = palindrom.charAt(palindrom.length() - 1 - i); // right side 
        defined by charAt

        if (palindrom.charAt(i) - 32 == palindrom.charAt(palindrom.length() - 1 - i) || (int) palindrom.charAt(i) + 32 == (int) palindrom.charAt(palindrom.length() - 1 - i) || palindrom.charAt(i) == palindrom.charAt(palindrom.length() - 1 - i)) {
            jeto = true; 

        } else {
            jeto = false;

            while (i < j) {
                if (a < 65 || a > 90 && a < 97 || a > 122) {
                    i++; // checks the left side for "non-letters" => skip
                }

                if (b < 65 || b > 90 && b < 97 || b > 122) {
                    j--; // checks the right side for "non-letters" => skip

                }

            }

        }
    }
    if (jeto) {
        System.out.println("is");
    } else {
        System.out.println("isn't");

    }

}

}

2 个答案:

答案 0 :(得分:1)

在检查回文之前尝试替换所有非字母字符

palindrom = palindrom.replaceAll("[^a-zA-Z]", "");

答案 1 :(得分:0)

您可以使用正则表达式或Character.isLetter()函数来消除非字母的字符。

但是如果你想坚持你的方法并且不想使用高级命令,那么定义你自己的isLetter函数:

public static boolean isLetter(int c){
    return (c>=65 && c<=90) || (c>=97 && c<=122);
}

然后,检查字符串中的所有字符,然后应用您的算法:

public static void main(String[] args) {

    String input = "*0Anna'/";
    String palindrom = "";
    for (int i = 0; i < input.length(); i++) {
        if(isLetter(input.charAt(i)))
            palindrom += input.charAt(i);
    }

    //Rest of the code

}

输出:

is

此外,与主要问题无关,但您可以使用if (palindrom.charAt(i) - 32 == palindrom.charAt(palindrom.length() - 1 - i) || (int) palindrom.charAt(i) + 32 == (int) palindrom.charAt(palindrom.length() - 1 - i) || palindrom.charAt(i) == palindrom.charAt(palindrom.length() - 1 - i))更改if (a - 32 == b || a + 32 == b || a == b)行。他们做同样的工作。