使用String.equals()检查字符串是否是回文结构

时间:2009-10-30 01:02:41

标签: java palindrome

我有一个关于我正在写的基本程序的问题,说赛车这样的词是否是回文。

我的所有反转字符串的方法,剥去标点符号的工作,但确定它是否是回文的那个方法不会。

/**
* Determines if a series of letters makes a palinedrome
* 
* @param  str   All punctuation and spaces have been removed 
*               before this method is called.  
* @return true  if phrase is a palindrome,
*         false otherwise.
*/
public boolean isPalindrome(String str)
{
   String d = reverseString (str); 
   return( str.equals (reverseString (str) ) ); 

}

5 个答案:

答案 0 :(得分:6)

好的,我不确定d在你的函数中的用途是什么,因为它从未使用过,但如果你想看看为什么你的函数不起作用,只需添加调试代码:

public boolean isPalindrome (String str) {
    System.out.println ("DEBUG: original string = '" + str + "'");
    System.out.println ("DEBUG: reverse string = '" + reverseString (str) + "'");
    if (str.equals (reverseString (str)))
        System.out.println ("DEBUG: returning true");
    else
        System.out.println ("DEBUG: returning false");
    return str.equals (reverseString (str));
}

我敢打赌你的reverseString功能有问题(但不是很多钱)。这些调试语句应该足以找出问题所在。

答案 1 :(得分:5)

如果string reverseString(String string),并删除了所有空格,那么检查是否有什么是回文应

public boolean isPalindrome(String string)
{
    return string.equals(reverseString(string));
}

当然这是区分大小写的,所以如果你的回文定义不关心套管,那么请改用equalsIgnoreCase。

如果这不起作用,那么您可能需要再次检查剥离和反向字符串方法。

答案 2 :(得分:0)

您的问题是您未显示的反向字符串方法。如果该方法正常工作,那么isPalindrome方法应该可行。您需要做的就是修复反向字符串方法。

Java没有本机反向字符串方法,我强烈建议您自己编写。

但是,Java确实为StringBufferStringBuilder提供了反向方法。 StringBuilder比StringBuffer更受欢迎。

使用equals方法将反向字符串与原始字符串进行比较

答案 3 :(得分:0)

代码应该是这样的:

String d = reverseString (str); 
return( str.equals (d) ); 

您不必再调用两次reverseString()

P.S。:StringBuffer有一个反转String的方法。

答案 4 :(得分:0)

我确定你现在已经提交了你的作业,但我正在学习java并需要练习,所以这里是我的代码。它使用一个char数组并反转它。我认为最好的方法是使用StringBuilder,但你的作业的意图可能是学会自己做:

public class reverseString {
    public static void main(String[] args) {
        System.out.println("racecar is a palindrome: "+ isPalindrome("racecar"));
    }

    public static boolean isPalindrome(String str)
    {
       String d = reverseString (str); 
       return( str.equals (reverseString (str) ) ); 
    }

    private static char[] reverse(char[] input) {
        int length = input.length;
        char[] reversed = new char[length];
        for (int i=0;i<length;i++) {
            reversed[length-i-1]=input[i];
        }
        return reversed;
    }

    private static String reverseString(String input){
        String reversed = new String(reverse(input.toCharArray())); 
        return reversed;
    }   
}

输出:

racecar is a palindrome: true

如果有人对我的代码糟糕的原因有任何评论,那就开火了。我很感激任何建设性的批评。