2013-03-14 42 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字符串”并点击第一个结果来找到它。

相关问题