代码如下: 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的更多相关文章

  1. 给Array本地对象增加一个原型方法,它用于删除数组条目中重复的条目(可能有多个),返回值是一个包含被删除的重复条目的新数组

    Array.prototype.removeCount=function(){ var that=this; var arr=[]; for(var i=0;i<that.length;i++) ...

  2. 用递归法判断字符串A中包含多少个字符串B

    string类提供了判断字符串B在字符串A中首次(或最后)出现的Index的方法,但有时候需要判断B在A中出现了多少次. 为此想了一个算法. public static void CountIndex ...

  3. win8中写好的程序,在win7中没办法运行

     没有安装相应版本的,net framework win8自带4.0 win7自带2.0 所以4.0及其以上的程序在win7跑必须安装4.0及其以上版本的framework

  4. python 面试题 删除字符串a中包含的字符串b

  5. 删除log日志中包含某个字符的行

    sed -i '/{Str}/d' abc.txt 假如你的log日志中某行有sleep字符,直接输入命令: sed -i '/sleep/d' log.log 如果删除的是一个变量的值,假如是var ...

  6. 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

    // test20.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...

  7. 写给后端程序员的HTTP缓存原理介绍

    There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Ka ...

  8. sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类

    sbt打包Scala写的Spark程序,打包正常,提交运行时提示找不到对应的类 详述 使用sbt对写的Spark程序打包,过程中没有问题 spark-submit提交jar包运行提示找不到对应的类 解 ...

  9. Java 处理json字符串value中多余的双引号

    转: Java 处理json字符串value中多余的双引号 一.错误场景 json字符串的value值中有多余的双引号 1.直接上错误的json字符串 1 String errorJsonStr =  ...

随机推荐

  1. ThinkPHP3(结构,路由,模板的调用,后台搭建,系统常量)

    ThinkPHP的结构如下: 在ThinkPHP\Library\Think文件夹中,几个重要的文件 1.App.class.php 框架核心类文件 2.Think.class.php 每次请求都要执 ...

  2. 【洛谷5537】【XR-3】系统设计(哈希_线段树上二分)

    我好像国赛以后就再也没有写过 OI 相关的博客 qwq Upd: 这篇博客是 NOIP (现在叫 CSP 了)之前写的,但是咕到 CSP 以后快一个月才发表 -- 我最近这么咕怎么办啊 -- 题目 洛 ...

  3. php怎么遍历关联和索引数组

    foreach $arr = ['a' => 1, 2, 3]; foreach($arr as $key => $value){ // } for $arr = [0, 1, 2, 3] ...

  4. The One day 中位数的计算

    """ 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / ...

  5. 把项目通过maven生产源码包和文档包并发布到自己的私服上

    <!-- 把项目通过maven生产源码包和文档包并发布到自己的私服上 执行maven命令,mvn clean package,执行完成后 命令:mvn deploy 就可以发布到你自己的私服上了 ...

  6. 超详细的纯净windows系统重装示例

    之前说过通过使用大白菜制作启动盘,再去系统之家下载系统.虽然系统能安装,但是有时安装的是ghost版本,安装方便,只要引导后面就是等待自动安装,驱动什么的都不用管.但是有时会带上很多软件,不好清理甚至 ...

  7. vip视频播放

    插件  Tampermonkey https://greasyfork.org/zh-CN

  8. sql 查询某个字段最长的记录

    sql  查询文本字段中值的长度最长的记录 一.函数1.SQL ServerLEN() 函数返回文本字段中值的长度.SELECT LEN(column_name) FROM table_name;2. ...

  9. Linq 等式运算符:SequenceEqual(转载)

    https://www.bbsmax.com/A/nAJvbKywJr/ 引用类型比较的是引用,需要自己实现IEqualityComparer 比较器. IList<string> str ...

  10. HTMLTestRunner 用PyCharm执行测试成功但无法生成报告问题

    在pythoncharm中运行时,运行成功,但是没有生成测试报告这个问题 代码: if __name__ == '__main__': # 创建测试套件suite suite = unittest.T ...