英文:
String is palindrome or not
问题
我需要检查一个字符串是否是回文,但我总是得到"not palindrome"。我的错误是什么?
public static void main(String[] args) {
String st = "iti";
StringBuffer st1 = new StringBuffer(st);
st1.reverse();
System.out.println(st1);
System.out.print(st.equals(st1));
if (st1.equals(st) == true) {
System.out.print("回文字符串");
} else {
System.out.print("不是回文");
}
}
英文:
I need to check whether a string is a palindrome, but I'm always getting "not palindrome". What's my mistake?
public static void main(String[] args) {
String st = "iti";
StringBuffer st1 =new StringBuffer(st);
st1.reverse();
System.out.println(st1);
System.out.print(st.equals(st1));
if(st1.equals(st)==true) {
System.out.print("palindrome string");
} else {
System.out.print("not palindrome");
}
}
答案1
得分: 2
A StringBuffer
不是一个 String
,因此它永远不会等于一个 String
。请与 st1.toString()
比较而不是与 st
比较。
另外,在 if(st1.equals(st)==true)
中,与 true
比较布尔值是不必要的,容易出错。你应该将其写成 if(st1.toString().equals(st))
,这样你就不会因错误使用单个 =
并引入难以注意到的错误。
class Palindrome {
public static void main(String[] args) {
String st = "iti";
StringBuffer st1 = new StringBuffer(st);
st1.reverse();
if (st1.toString().equals(st)) { // 注意这里使用了 `toString`
System.out.print("回文字符串");
} else {
System.out.print("不是回文");
}
}
}
英文:
A StringBuffer
is not a String
, thus it will never be equal to a String
. Compare st
with st1.toString()
instead.
As an aside, in if(st1.equals(st)==true)
comparing a boolean with true
is not necessary and error-prone. You should write it as if(st1.toString().equals(st))
so you don't use a single =
by mistake and introduce a bug that can be rather hard to notice.
class Palindrome {
public static void main(String[] args) {
String st = "iti";
StringBuffer st1 =new StringBuffer(st);
st1.reverse();
if(st1.toString().equals(st)) { // HERE notice the use of `toString`
System.out.print("palindrome string");
} else {
System.out.print("not palindrome");
}
}
}
答案2
得分: 0
public static void main(String[] args) {
String st = "iti";
StringBuffer st1 = new StringBuffer(st);
st1.reverse();
System.out.println(st1);
System.out.println(st.equals(st1));
if (st.equals("" + st1)) { // convert st1 from StringBuffer to String
System.out.print("回文字符串");
} else {
System.out.print("不是回文字符串");
}
}
英文:
public static void main(String[] args) {
String st = "iti";
StringBuffer st1 =new StringBuffer(st);
st1.reverse();
System.out.println(st1);
System.out.println(st.equals(st1));
if(st.equals(""+st1)) { // convert st1 from StringBuffer to String
System.out.print("palindrome string");
} else {
System.out.print("not palindrome");
}
}
答案3
得分: 0
To derive the String value within StringBuffer, you need to call the toString method.
System.out.print(st.equals(st1.toString()));
And, at your if-conditional statement.
if(st1.toString().equals(st)==true)
英文:
To derive the String value within StringBuffer, you need to call the toString method.
System.out.print(st.equals(st1.toString()));
And, at your if-conditional statement.
if(st1.toString().equals(st)==true)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论