传智播客旗下技术交流社区北京校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 WangQiJourney 于 2019-1-8 17:11 编辑

关于StringBuilder使用equals时容易不注意的地方

异常一
  
创建人
  
王琦
问题标题
功能实现错误
问题分类
equals()方法使用错误
一级话题
String  类型的字符串,和StringBuilder类型,使用equals方法比较,得出的并不是正确的 内容比较的值
问题补充
用equals方法判断是否为回文字符串,运行结果为全部都是不回文,即equals结果全为false
附件
[Java] 纯文本查看 复制代码
                System.out.println("检测是否为回文字符串"+'\n'+"输入要检测的字符串,中间用逗号隔开:");
                Scanner scanner = new Scanner(System.in);
                String str = scanner.next();
                String[] strs = str.split(",");       //将输入的内容按照逗号分割为String数组
                ArrayList<String> is = new ArrayList<>();     //建立回文字符串集合
                ArrayList<String> no = new ArrayList<>();    //建立非回文字符串集合
                for (int i = 0; i < strs.length; i++) {                  //遍历
                        StringBuilder sb = new StringBuilder(strs[i]);    //放进StringBuilder中
                        if(strs[i].equals(sb.reverse())){    //利用StringBuilder的reverse方法判断【此处错误】
                                is.add(strs[i]);               
                        }else{
                                no.add(strs[i]);
                        }
                }
                System.out.println("其中,是回文字符串的有:"+is);
                System.out.println("不是回文字符串的有:"+no);

问题答案
问题分析:
  
String类中重写了equals方法,比较的是内容,但只有参数内容也是一个字符串并且内容相同才会给出true。
  
StringBuilder并不是String,因此需要把它用toString方法转化为字符串才可以正确的用equals比较内容是否相同。
   
问题解决方法:
  
修改代码部分:
  
[Java] 纯文本查看 复制代码
 if(strs[i].equals(sb.reverse()))
  
修改为
  
[Java] 纯文本查看 复制代码
if(strs[i].equals(sb.reverse().toString()))

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马