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

时间:2013-03-14 05:09:22

标签: java string compare

如果字符串是回文,我想写一个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.

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

5 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

如果需要,请使用以下正则表达式在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());

答案 3 :(得分: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);
}
}

答案 4 :(得分:0)

  1. 转换为小写

  2. 使用正则表达式删除除字母

  3. 之外的所有内容
  4. 使用StringBuilder

  5. 反转字符串
  6. 比较字符串是否相等

  7. 代码:

    /**
     *  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 String ”并点击第一个结果找到它。