Java StringBuilder和equals用于比较原始字符串和反转字符串

Java StringBuilder和equals用于比较原始字符串和反转字符串,java,Java,程序检查字符串的倒数和原始字符串是否相同,为了得到字符串的倒数,我在java中使用stringbuilder并比较java的倒数,但输出不正确。如果原始字符串和倒数字符串相同,则输出yes else输出NO import java.io.*; import java.util.Scanner; import java.lang.*; public class Stringuse { private static Scanner in; public static void mai

程序检查字符串的倒数和原始字符串是否相同,为了得到字符串的倒数,我在java中使用stringbuilder并比较java的倒数,但输出不正确。如果原始字符串和倒数字符串相同,则输出yes else输出NO

import java.io.*;
import java.util.Scanner;
import java.lang.*;
public class Stringuse {
    private static Scanner in;
    public static void main(String[] args) {
        in = new Scanner(System.in);
        String s=in.next();
        StringBuilder sb=new StringBuilder(s);
        sb.reverse().toString();
        System.out.println(sb);
        boolean ans=sb.equals(s);
        System.out.println(ans);
        if(ans==true)
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}

你可能只需要把它改成

boolean ans = sb.toString().equals(s);
因为只有
String
s等于其他
String
s;
StringBuilder
不能等于
String


…虽然您也可以编写
sb.reverse()
而不是
sb.reverse().toString()
,以及
if(ans)
而不是
if(ans==true)
,但您可能只需要将其更改为

boolean ans = sb.toString().equals(s);
因为只有
String
s等于其他
String
s;
StringBuilder
不能等于
String


…虽然您也可以编写
sb.reverse()
而不是
sb.reverse().toString()
,也可以编写
if(ans)
而不是
if(ans==true)
,我只是按照注释中的建议做了一些更改,现在工作正常

public static void main(String[] args) {
  in = new Scanner(System.in);
  String s=in.next();
  StringBuilder sb=new StringBuilder(s);
  boolean ans= sb.reverse().toString().equals(s);
  if(ans==true)
    System.out.println("Yes");
  else
    System.out.println("No");
}

我只是按照评论中的建议做了一些修改,现在一切正常

public static void main(String[] args) {
  in = new Scanner(System.in);
  String s=in.next();
  StringBuilder sb=new StringBuilder(s);
  boolean ans= sb.reverse().toString().equals(s);
  if(ans==true)
    System.out.println("Yes");
  else
    System.out.println("No");
}

StringBuilder
s无论如何都不会等于
String
s。您必须使用
sb.toString().equals
@LouisWasserman如果(ans==true)是多余的,您能在注释中给出正确的代码版本吗
if(ans)
是一种在不创建新字符串或不使用StringBuilder的情况下执行此操作的更好方法:@Goaler444*前提是字符串完全由单字符代码点组成。
StringBuilder
s无论如何都不会等于
string
s。您必须使用
sb.toString().equals
@LouisWasserman如果(ans==true)是多余的,您能在注释中给出正确的代码版本吗<代码>如果(ans)是一种不创建新字符串或不使用StringBuilder的更好方法:@Goaler444*前提是字符串完全由单字符代码点组成。StringBuilder不能等于字符串,也不能等于具有相同内容的其他StringBuilder,因为StringBuilder没有实现equals方法,所以StringBuilder不能等于String,也不能等于具有相同内容的其他StringBuilder,因为StringBuilder没有实现equals方法