我的目标是创建一个代码,用于检查单词是否属于回文,同时跳过不是字母的所有内容,也不会考虑大小写的情况。 我需要坚持我的方法,不能使用高级命令,即使我确信有更好的方法来编写这段代码。 问题在于变量" 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");
}
}
}
答案 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)
行。他们做同样的工作。