我使用递归来查明字符串是否是回文,而忽略空格和非字母字符。但是,每个空格都会导致字符串被拆分并单独测试。这是我的代码。
public class RecursivePalindrome
{
RecursivePalindrome()
{
}
public boolean checkPalindrome(String y)
{
String s = y;
String removed = s.replaceAll("\\W", "");
removed = removed.toLowerCase();
return isPalindrome(removed);
}
public boolean isPalindrome(String y)
{
if ( y.length() < 2 )
return true;
char firstChar = y.charAt(0);
char lastChar = y.charAt(y.length() - 1);
if(firstChar != lastChar)
return false;
else
return checkPalindrome(y.substring(1, y.length()-1));
}
}
这是测试人员类。
import java.util.Scanner;
public class RecursivePalindromeTester
{
public static void main(String [] args)
{
Scanner in = new Scanner(System.in);
RecursivePalindrome aMethod = new RecursivePalindrome();
int z = 0;
while (z < 1)
{
System.out.println("Please enter a word or phrase.(Entering q will stop the program)");
String n = in.next();
if(n.equalsIgnoreCase("Q"))
{
System.out.println("End of Program");
z++;
}
else{
if (aMethod.checkPalindrome(n))
{
System.out.println(n + " is a palindrome");
}
else
{
System.out.println(n + " is not a palindrome");
}}
}
}
}
答案 0 :(得分:1)
Scanner#next(),根据javadoc,查找并返回此扫描程序中的下一个完整令牌,即一个单词(中断Space
)。
Scanner#nextLine()而不是使此扫描程序超过当前行并返回跳过的输入意味着写入所有行(在您的情况下直到Enter
被按下)
将in.next()
更改为in.nextLine()
。
答案 1 :(得分:0)
问题出在RecursivePalindromeTester
。您正在使用的扫描仪在空白处打破。您可以将其更改为在换行符上打破:
in.useDelimiter(new Pattern("\n");