Java,检查String是否是回文。 不区分大小写

我想编写一个java方法,如果字符串是回文,则返回true。

这是我到目前为止:

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. 

测试这是否是回文的最佳方法是什么,不区分大小写并忽略标点符号。

使用此正则表达式删除所有标点符号和空格并将其转换为小写

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

尝试这个 ..

 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 

如果需要,使用下面的正则表达式,在Palindrome中保持偶数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()); 

这是一个非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=65 && c[i]<=90) || (c[i]>=97 && c[i]<=122)) //check ASCII values (AZ 65-90) and (az 97-122) { newStr = newStr + c[i]; } } boolean isPalindrome = newStr.toLowerCase().equals(new StringBuilder(newStr.toLowerCase()).reverse().toString()); System.out.println(isPalindrome); } } 
  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("[^az]", ""); String reverse = new StringBuilder(forward).reverse().toString(); return forward.equals(reverse); } 

有关更多信息,请参阅String和StringBuilder的文档:

  • String.toLowerCase()
  • String.replaceAll()
  • StringBuilder.reverse()

您也可以通过Google搜索“ Java 7 String ”并单击第一个结果来找到它。