簡體   English   中英

Java回文檢查器

[英]Java Palindrome checker

我的回文檢查器出現問題,因為它無法正常工作。 它必須能夠測試以下四件事:

    TestPalindrome("Madam, I'm Adam", true);
    TestPalindrome("addbda", false );
    TestPalindrome("", false);
    TestPalindrome("Dammit, I'm mad", true);

這是我的回文代碼:

public static boolean IsPalindrome( String inputString )
{
    String reverse = "";
    for(int i = inputString.replaceAll("[^a-zA-Z ]", "").length() -1; i>=0; i--){
        reverse = reverse + inputString.replaceAll("[^a-zA-Z ]", "").charAt(i);
    }
    if(inputString.replaceAll("[^a-zA-Z ]", "").equalsIgnoreCase(reverse.toString()) && !inputString.replaceAll("[^a-zA-Z ]", "").isEmpty()){
        return true;
    }

    if(!inputString.replaceAll("[^a-zA-Z ]", "").equalsIgnoreCase(reverse.toString()) && !inputString.replaceAll("[^a-zA-Z ]", "").isEmpty()){
        return false;
    }

    if(inputString.replaceAll("[^a-zA-Z ]", "").isEmpty()){
        return false;
    }

    else return true;
         }
}

這是我的輸出是:

TestPalindrome failed: expected true got false
TestPalindrome passed!
TestPalindrome passed!
TestPalindrome failed: expected true got false

任何人都可以幫助我解決此問題,以便我獲得列表中的所有通行證。 我知道有人問過類似的問題,但我不是在問如何做回文檢查程序,而是要如何解決我的特定問題。 我使用了其他問題來學習,但是由於某種原因我的那個問題不起作用。

為了使這種算法起作用,您需要考慮清除諸如逗號,半角分號,撇號等(我在談論';:'等)的守時符號。

Java有一個StringBuilder類,並且有一個反向字符串的方法

因此,如果您清潔字符串以進行檢查,將其反轉並再次進行比較,則可以看到它是否是回文...

例:

public static void main(String[] args) {
    String word = "Madam, I'm Adam";
    String word2 = "addbda";
    String word3 = "";
    String word4 = "Dammit, I'm mad";
    System.out.println(IsPalindrome(word));
    System.out.println(IsPalindrome(word2));
    System.out.println(IsPalindrome(word3));
    System.out.println(IsPalindrome(word4));
}

private static boolean IsPalindrome(String word) {
    String wordClean = word.replaceAll("[^a-zA-Z  ]", "");
    String reversedWord =  new StringBuilder(wordClean).reverse().toString();
    System.out.println(wordClean);
    System.out.println(reversedWord);
        return reversedWord.equalsIgnoreCase(wordClean)&&!wordClean.isEmpty();
}

這將打印

MadamImAdam madAmImadaM true

addbda adbdda否

假(空支票)

DammitImmad dammItimmaD true

您不是要刪除空格,因此只有空格相同的字符串才是好的。 只需使用[^a-zA-Z]反對[^a-zA-Z ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM