java中的字符串回文检查器不工作?
我正试图为这些指令编写一个程序: 给定一个字符串,确定它是否是回文,只考虑字母数字字符,忽略大小写。 注意:为了解决这个问题,我们将空java中的字符串回文检查器不工作?,java,string,boolean,stringbuilder,palindrome,Java,String,Boolean,Stringbuilder,Palindrome,我正试图为这些指令编写一个程序: 给定一个字符串,确定它是否是回文,只考虑字母数字字符,忽略大小写。 注意:为了解决这个问题,我们将空String定义为有效回文。 出于某种原因,最后一行中的.reverse()不会将其反转。我尝试过通过添加print语句进行调试,我发现前面的字符串确实相反。这是怎么回事?请引导我 public static boolean isPalindrome(String s) { StringBuilder sb = new StringBuilder();
String
定义为有效回文。
出于某种原因,最后一行中的.reverse()
不会将其反转。我尝试过通过添加print语句进行调试,我发现前面的字符串确实相反。这是怎么回事?请引导我
public static boolean isPalindrome(String s) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (Character.isLetter(s.charAt(i))) {
sb.append(s.charAt(i));
}
}
String x = sb.reverse().toString();
System.out.println(x);
if (sb.length() == 0)
return true;
else
return sb.toString().equals(x);
}
public静态布尔值isAlindrome(字符串s){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
问题在于更改了StringBuilder
本身。所以你是在对比反面,再次对比反面。而是将方法更改为:
String x = sb.toString();
return sb.reverse().toString().equals(x);
public static boolean pali(String s) {
String copy = s.toLowerCase().replaceAll("[^a-z]", "");
return new StringBuilder(copy).reverse().toString().equals(copy);
}
这将在反转之前比较StringBuilder
,与反转后的StringBuilder
。请注意,if(sb.length==0)
是不必要的,因为如果它是空的,sb.reverse().toString().equals(x)
仍将返回true
此外,当问题陈述说无论大小写都应该匹配时,您的搜索是区分大小写的。更改附加到的位置:
if (Character.isLetter(s.charAt(i))) {
sb.append(Character.toLowerCase(s.charAt(i)));
}
您还可以利用
replaceAll
和toLowerCase()
将方法缩短为:
String x = sb.toString();
return sb.reverse().toString().equals(x);
public static boolean pali(String s) {
String copy = s.toLowerCase().replaceAll("[^a-z]", "");
return new StringBuilder(copy).reverse().toString().equals(copy);
}
因为在第一次调用
sb.reverse()
sb之后,它改变了状态