回文的java字符串概念

回文的java字符串概念,java,string,Java,String,我试图找出给定的字符串是否是回文,但是,即使是回文,它也永远不会进入打印“给定字符串是回文”的if块 String s; Scanner scan = new Scanner(System.in); System.out.println("enter any string"); s = scan.nextLine(); System.out.println("contents of string s " + s); scan.close(); StringBuffer stringbuffe

我试图找出给定的
字符串
是否是回文,但是,即使是回文,它也永远不会进入打印“给定字符串是回文”的
if

String s;
Scanner scan = new Scanner(System.in);

System.out.println("enter any string");
s = scan.nextLine();
System.out.println("contents of string s " + s);
scan.close();

StringBuffer stringbuffer = new StringBuffer(s);
System.out.println("contents of stringbuffer " + stringbuffer);
stringbuffer = stringbuffer.reverse();

System.out.println("contents of reversed stringbuffer " + stringbuffer);
if(s.equals(stringbuffer))
{
    System.out.println(" given string is a palindrome");
}
有人能告诉我我做错了什么吗?

如果(s.equals(stringbuffer))
在这里,您试图将
String
stringbuffer
进行比较,后者将始终返回
false

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
这就是内部方法的工作原理。因此,首先它将检查另一个对象是否为字符串的实例。因此,在这里它将返回
false
So
.equals()
方法将在任何情况下给出
false
作为输出

您可以使用那里的来比较两者,或者将
StringBuffer
转换为
String
并调用
String.equals()
方法

if(s.contentEquals(stringbuffer))
{
    System.out.println(" given string is a palindrome");
}
或者将
StringBuffer
转换为
String
,然后调用
.equals()
方法

if(s.equals(stringbuffer.toString()))
{
    System.out.println(" given string is a palindrome");
}
if(s.equals(stringbuffer))
这里您试图将
String
stringbuffer
进行比较,后者将始终返回
false

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = value.length;
        if (n == anotherString.value.length) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = 0;
            while (n-- != 0) {
                if (v1[i] != v2[i])
                    return false;
                i++;
            }
            return true;
        }
    }
    return false;
}
这就是内部方法的工作原理。因此,首先它将检查另一个对象是否为字符串的实例。因此,在这里它将返回
false
So
.equals()
方法将在任何情况下给出
false
作为输出

您可以使用那里的来比较两者,或者将
StringBuffer
转换为
String
并调用
String.equals()
方法

if(s.contentEquals(stringbuffer))
{
    System.out.println(" given string is a palindrome");
}
或者将
StringBuffer
转换为
String
,然后调用
.equals()
方法

if(s.equals(stringbuffer.toString()))
{
    System.out.println(" given string is a palindrome");
}

您正在比较类型
String
和类型
StringBuffer
,因此它永远不会进入
if

不仅比较
字符串
内容,还检查另一个对象是否是
字符串

你要找的是不做类型检查的

if(s.contentEquals(stringbuffer))
{
     System.out.println(" given string is a palindrome");
}
或者在比较之前将
StringBuffer
变量转换为类型
String

if(s.equals(stringbuffer.toString()))
{
     System.out.println(" given string is a palindrome");
}

您正在比较类型
String
和类型
StringBuffer
,因此它永远不会进入
if

不仅比较
字符串
内容,还检查另一个对象是否是
字符串

你要找的是不做类型检查的

if(s.contentEquals(stringbuffer))
{
     System.out.println(" given string is a palindrome");
}
或者在比较之前将
StringBuffer
变量转换为类型
String

if(s.equals(stringbuffer.toString()))
{
     System.out.println(" given string is a palindrome");
}

if
条件下,您正在比较两种不同类型的对象。记住
String
&
StringBuffer
是两个不同的类,因此它们的对象不相等。 为了得到正确的结果,您需要从StringBuffer中获取
String
对象


因此,
if(s.equals(stringbuffer.toString())
对您有效。

if
条件下,您正在比较两种不同类型的对象。记住
String
&
StringBuffer
是两个不同的类,因此它们的对象不相等。 为了得到正确的结果,您需要从StringBuffer中获取
String
对象


因此,
if(s.equals(stringbuffer.toString())
对您有用。

谢谢您让我知道它的内部实现。@PrasadS如果您发现任何有用的答案,请接受它!我无法做到这一点,因为我只有13点声誉。否则我会那样做的。谢谢你,阿加尼认为我们不需要那么多的声誉来接受一个答案。@prasad不需要。你确定你试对了吗?它是左边的复选按钮(灰色)。感谢您让我知道它的内部实现。@PrasadS如果您发现任何答案有用,请接受它!我无法做到这一点,因为我只有13点声誉。否则我会那样做的。再一次谢谢你,阿加尼,不要认为我们需要那么多的声誉来接受答案。@PrasadS,不,不需要。你确定你试对了吗?是的,我尝试了你之前建议的第二种方法。很好用。谢谢是的,我试了你刚才建议的第二种方法。很好用。谢谢你,第一眼看上去还不错。在IF语句上加一个断点,看看有什么不同。可能是编码,乍一看还可以。在IF语句上加一个断点,看看有什么不同。可能是编码。