码迷,mamicode.com
首页 > 其他好文 > 详细

写一段程序,删除字符串a中包含的字符串b,举例 输入a = "asdw",b = "sd" 返回 字符串 “aw”;一个容易被忽略的bug

时间:2018-08-02 19:10:19      阅读:281      评论:0      收藏:0      [点我收藏+]

标签:返回   删除字符串   int   引用   end   执行   length   sha   bug   

代码如下: public class test{

public static void main(String args[]){

String test=test("sahsjkshabshwkiixab","");

System.out.println(test);

}

public static String test(String str,String targetstr) {

StringBuffer bf = new StringBuffer();

if (str==null||targetStr==null) {

return bf.toString();

}

if (str.length()>=targetstr.length()){

for(int i=0;i<str.length();i++){

if(i+targetstr.length()>str.length()){

bf.append(str.substring(i,str.length())); break;

}

if(!str.substring(i,i+targetstr.length()).equals(targetstr)){

bf.append(str.substring(i,i+1));

}

else{

i=i+targetstr.length()-1;

}

}

return bf.toString();

}

else {

bf.append(str);

return bf.toString();

} } }

本程序写完后,运行测试过程中,遇到一个有意思的问题,当输入字符串某个为null的时候,程序进入死循环,一直没执行完,后发现是因为判断条件 if (str==null||targetStr==null) 不生效导致;

为什么不生效呢????

因为楼主搞混了“”和null是有区别的,

1. null表示这个字符串不指向任何的东西,如果这时候你调用它的方法,那么就会出现空指针异常。

2.""表示它指向一个长度为0的字符串,这时候调用它的方法是安全的。

3. null不是对象,""是对象,所以null没有分配空间,""分配了空间,例如: String str1 = null; str引用为空 String str2 = ""; str应用一个空串

4,所以,判断一个字符串是否为空,首先就要确保他不是null,然后再判断他的长度。 String str = xxx; if(str != null && str.length() != 0) { }

另外考虑效率的问题:s.equals("") 慢于s.length() <= 0;而s.isEmpty()有可能不兼容;

所以此处最好将判断条件修改为 if (str==null||str.length()==0||targetstr==null||targetstr.length()==0)

写一段程序,删除字符串a中包含的字符串b,举例 输入a = "asdw",b = "sd" 返回 字符串 “aw”;一个容易被忽略的bug

标签:返回   删除字符串   int   引用   end   执行   length   sha   bug   

原文地址:https://www.cnblogs.com/chengbai/p/9408946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!