Java-检查回文

时间:2013-05-22 11:29:16

标签: java palindrome

有人可以指出我的计划中的错误吗?

输出总是:“它不是回文”

String newstr="";
for(int j=length-1;j>0;j--)
{
    char m=str.charAt(j);
    newstr=newstr+m;
}
if(newstr.equals(str) )
    System.out.println("it is a palindrome");
else
    System.out.println("it is not a palindrome");

提前感谢:)

6 个答案:

答案 0 :(得分:3)

首先,使用String.equals()来比较字符串而不是==

if(newstr.equals(str))

此外,字符串索引从0开始,因此您需要:

for(int j=length-1;j>=0;j--)

这两个修复都应该有效。

答案 1 :(得分:3)

if(newstr==str)

应该是

if ( newstr.equals( str ) )

并阅读对象比较。你有效地比较了两个指针,而不是字符串内容。

当然,使用Java 5及其后,你可以做到

new StringBuilder( str ).reverse().toString().equals( str );

干杯,

答案 2 :(得分:2)

数组的索引从0开始。我猜你应该使用

for(int j=length-1;j>=0;j--)

而不是

for(int j=length-1;j>0;j--)

答案 3 :(得分:1)

==运算符检查两个引用是否指向同一个对象。 .equals()方法实际上会检查字符串的内容。

所以你的代码必须是

    if(newstr.equals(str))
    System.out.println("it is a palindrome");
    else
    System.out.println("it is not a palindrome");

答案 4 :(得分:0)

==测试参考相等性。

.equals()测试价值平等。

因此,如果您确实想要测试两个字符串是否具有相同的值,则应使用.equals()(在少数情况下,您可以保证具有相同值的两个字符串将由同一对象表示

这将是最终的代码。阅读string comparison in java

  String newstr="";

   for(int j=length-1;j>0;j--)
   {
       char m=str.charAt(j);
       newstr=newstr+m;
    }
    if(newstr.equals( str ) )
    System.out.println("it is a palindrome");
    else
    System.out.println("it is not a palindrome");

答案 5 :(得分:0)

public static boolean isPaliandrome(String str) {
        StringBuilder lettersBuff = new StringBuilder(str);
        String str_inverse = lettersBuff.reverse().toString();
        char[] charArrayInverse = str_inverse.toCharArray();
        boolean isPaliandrome = false;
        String caracInverseConverted = new String(charArrayInverse);
        if (str.equals(caracInverseConverted)) {
            isPaliandrome = true;
        }
        return isPaliandrome;
    }