2013-03-14 40 views
4

我想編寫一個java方法來返回true,如果一個字符串是迴文。Java,檢查字符串是否是迴文。不區分大小寫

這是我到目前爲止有:

String palindrome = "..."; 
boolean isPalindrome = palindrome.equals(
    new StringBuilder(palindrome).reverse().toString()); 

我這個問題是,它沒有考慮像一個字:Race car是迴文。

Doc, note, I dissent. A fast never prevents a fatness. I diet on cod. 

什麼是最好的方法來測試,如果這是一個迴文,不區分大小寫和忽略標點符號。

回答

7

使用此正則表達式來刪除所有標點和空格,並將其轉換爲小寫

String palindrome = "..." // from elsewhere 
boolean isPalindrome = palindrome.replaceAll("[^A-Za-z]", "").toLowerCase().equals(new StringBuilder(palindrome.replaceAll("[^A-Za-z]", "").toLowerCase()).reverse().toString()); 
+0

感謝您抽出寶貴的時間來作出迴應,但: 輸出: 賽車 假 – user2121604 2013-03-14 05:25:42

+1

@ user2121604 - 他只是忘了轉換_palindrome_爲小寫...你應該嘗試理解和學習這個答案,而不是僅僅複製和粘貼它。 – jahroy 2013-03-14 05:34:33

+0

嗯,我想看看它是否先工作,然後嘗試從中吸取教訓。 但是,請您詳細說明一下嗎?我不知道如何將它全部轉換爲小寫,我是Java新手。對不起,感謝 – user2121604 2013-03-14 05:36:00

1

試試這個..

public static void main(String[] args) { 

    boolean notPalindrome = false; 
    String string = "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"; 

    string = string.replaceAll("[^a-zA-Z]+","").toLowerCase(); 

    char[] array = string.toCharArray(); 
    for(int i=0, j=array.length-1; i<j; i++, j--) { 
     if(array[i] != array[j]) { 
      notPalindrome = true; 
      break; 
     } 
    } 
    System.out.println(string + " is palindrome? " + !notPalindrome); 
} 
+0

Vinee的Soln似乎更合適。 – 2013-03-14 05:19:47

+0

其實這似乎工作到目前爲止,我會繼續檢查是否有其他人有不同的想法,但決定去之前! 感謝您抽出寶貴時間 – user2121604 2013-03-14 05:30:24

0

使用正則表達式如下,以保持甚至numeric字符迴文, 如果需要的話。否則,你可以從正則表達式中刪除0-9

String palindrome = "..." // from elsewhere 
String regex = "[^A-Za-z0-9]"; 
boolean isPalindrome = palindrome.equals(new StringBuilder(palindrome.replaceAll(regex, "").toLowerCase()).reverse().toString()); 
0

這是非regex解決方案。

public class so4 
{ 
public static void main(String args[]) 
{ 
    String str = "Doc, note, I dissent. A fast never prevents a fatness. I diet on cod"; 
    char c[] =str.toCharArray(); 
    String newStr=""; 
    for(int i=0;i<c.length;i++) 
    { 
     if((c[i]>=65 && c[i]<=90) || (c[i]>=97 && c[i]<=122)) //check ASCII values (A-Z 65-90) and (a-z 97-122) 
     { 
      newStr = newStr + c[i]; 
     } 
    } 
    boolean isPalindrome = newStr.toLowerCase().equals(new StringBuilder(newStr.toLowerCase()).reverse().toString()); 
    System.out.println(isPalindrome); 
} 
} 
0
  1. 轉換爲小寫

  2. 使用正則表達式來刪除一切,但字母

  3. 使用字符串逆向一個StringBuilder

  4. 比較字符串平等

代碼:

/** 
* Returns true if s is a palindrome, ignoring whitespace 
* punctuation, and capitalization. Returns false otherwise. 
*/ 

public boolean isPalindrome(String s) { 
    String forward = s.toLowerCase().replaceAll("[^a-z]", ""); 
    String reverse = new StringBuilder(forward).reverse().toString(); 
    return forward.equals(reverse); 
} 

欲瞭解更多信息,請參閱文檔StringStringBuilder

您也可以通過使用Google搜索「Java 7字符串」並點擊第一個結果來找到它。

相關問題