忽略isPalindrome()方法中的一个字母--Java

时间:2013-04-01 02:07:55

标签: java oop palindrome

我想知道如何修改以下方法以忽略某个字母,并在检查字符串是否为回文时将其作为通配符...

示例:“wows”,在这种情况下,该方法应返回false但

“pat”,'t'可以是通配符(被视为p),因此它返回true

“job”,b又可以是通配符并被视为j,因此方法返回true。

这是我到目前为止,我有一个单独的方法忽略特殊字符和空格,所以在这篇文章中不需要考虑。

private static boolean checkPalindrome2(String word) {
    if(word.length() < 2) { 
        return true;  
    }
    char first  = word.charAt(0);
    char last   = word.charAt(word.length()-1);
    if(first != last) { 
        return false; 
    }
    else { 
        return checkPalindrome2(word.substring(1,word.length()-1));
    }
}

这是我的测试类,

public class testPalindromes {

    public static void main(String[] args) {
        //if (Palindromes.isPalindrome("a") == true) {
        //  System.out.println("true");
        //} else {
        //  System.out.println("false");
        //}

        // block above is the same as this
        // isPalindrome already returns true or false, 
        // and true and false can be printed as strings
        System.out.println(isPalindrome("a"));

        if (Palindromes.isPalindrome("cat") == true) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        if (Palindromes.isPalindrome("w o    w") == true) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        if (Palindromes.isPalindrome("   a  ") == true) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
        if (Palindromes.isPalindrome("mom!") == true) {
            System.out.println("true");

        if (Palindromes.isPalindrome2("cat")==true){
            System.out.print("true");
        } else {
            System.out.println("false");
            }

        }

    }

}

isPalindromes2是一个调用上面的checkPalindrome2方法的方法,我的测试类(word cat)中的最后一个案例应该返回true,因为t将是通配符(如上所述再次使用通配符,替换为c制作cat,cac,是一个回文)

提前感谢所有帮助/输入!!!! ps,我故意实现了一个递归方法。

1 个答案:

答案 0 :(得分:2)

只需在基础案例中添加额外条件:

// both first and last have to NOT be the special character
// and first has to not equal last for this to return false
if(first != special && last != special && first != last)
    return false; 
else
    return checkPalindrome(word.substring(1,word.length()-1));