本帖最后由 WangQiJourney 于 2019-1-8 17:11 编辑
关于StringBuilder使用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())) |
|