我写了一个递归方法来检查一个单词是否是回文。
但我现在也希望检查字符串中的任何特殊字符(*?!<所以如果字符串是ab.ba则不是回文。
这就是我所拥有的和isAlphanuemerical()在单步执行时似乎正常工作,但是如果我输入ab.ba它仍然会记录为回文
public static boolean isPal(String s)
{
if(s.length() == 0 || s.length() == 1)
return true;
// Check if String contains any alphanumeric characters
if (isAlphanumeric(s))
return false;
if(s.charAt(0) == s.charAt(s.length()-1))
return isPal(s.substring(1, s.length()-1));//if its not the case than string is not.
return false;
}
我的isAlphaneumerical()方法
public static boolean isAlphanumeric(String str) {
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (!Character.isLetter(c) && !Character.isDigit(c))
return false;
}
return true;
}
答案 0 :(得分:3)
if (isAlphanumeric(s))
return false;
应该是
if (!isAlphanumeric(s))
return false;
此外,您无需每隔一段时间调用isAlphanumeric(s)。您可以调用一次,或者更改它以便它只检查第一个/最后一个字符。您正在检查之前已经检查过的内容。
public static boolean isPal(String s)
{
if (!isAlphanumeric(s))
return false;
return _isPal(s);
}
private static boolean _isPal(String s)
{
if (s.length() == 0 || s.length() == 1)
return true;
if (s.charAt(0) == s.charAt(s.length()-1))
return _isPal(s.substring(1, s.length()-1));
return false;
}
private static boolean isAlphanumeric(String str)
{
for (int i = 0; i < str.length(); i++)
{
char c = str.charAt(i);
if (!Character.isLetter(c) && !Character.isDigit(c))
return false;
}
return true;
}
答案 1 :(得分:1)
您的代码完全按照您的要求执行操作。 isAlphanumeric
方法工作正常。
但是,如果 是字母数字,那么isPal
会返回false
。
如果您不想将非字母数字字符串作为回文,那么请颠倒您的逻辑:
if (!isAlphanumeric(s))
return false;
这使用!
运算符来否定布尔结果。