当前位置: 首页 > 知识库问答 >
问题:

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

谢灵均
2023-03-14

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

示例:“wow”,在这种情况下,该方法应该返回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 方法的方法,我的测试类中的最后一种情况(单词 cat)应该返回 true,因为 t 将是通配符字母(如上所述再次使用通配符,替换为 c 使 cat,cac 是一个回文)

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

共有1个答案

尚景焕
2023-03-14

只需在基本情况下添加额外的条件:

// 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));
 类似资料:
  • 我的程序需要接受整数、单个字符或一个特定字符串(本例中我将使用)。虽然每一个都可以用空格分隔,但不需要这样做。 目前,我的解析代码依赖于,如下所示: 目前,我的程序将接受输入像没有任何问题。然而,它也应该接受相同的输入,没有任何空白(),并以相同的方式解释它,并且在我当前的代码中,单个数字被错误地解释为字符。 我觉得原因可能是我使用的正则表达式。但是,添加

  • 所以,我试着做一个简单的带有开关的菜单。 还要注意:我使用旧版本的Java和NetBeans8.2作为IDE。(因为我的学院一直坚持不使用新的。可能是因为他们还没有课本。),所以可能新的语法不起作用。 我的代码:

  • 问题内容: 比方说,我有一个名为测试类有几种方法,,,等,每个注释。 现在让我们说我将子类归类为,并且我不会覆盖任何内容。目前是空的。 当我从运行测试,方法,以及因为测试运行不从类和基类的测试方法区分是通过测试运行执行。 如何强制测试运行程序放弃基类的测试? 问题答案: 重组您的测试类。 如果您不想使用基类中的测试,则不要扩展它 如果您需要基类的其他功能,请将该类一分为二-测试和其他功能

  • 这是打算在Java中使用的。想象以下示例输入: 我想匹配至少一个数字后面的所有字母字符。 所需输出:

  • 有没有一种方法可以忽略使用mapstruct在此代码示例中第三种方法的映射器的生成?

  • 我尝试设置我的JPA映射。由于某些原因,我必须有相同的java变量/表列名(包括大写字母),但我不能设置Hibernate。我尝试了明确的列名: 对于隐式映射: 这两种方法都创建不带大写字母的列名——“nextinvoicenr”。 我还试图改变Hibernate配置添加: 但没有成功