1. 程式人生 > >寫一段程序,刪除字符串a中包含的字符串b,舉例 輸入a = "asdw",b = "sd" 返回 字符串 “aw”;一個容易被忽略的bug

寫一段程序,刪除字符串a中包含的字符串b,舉例 輸入a = "asdw",b = "sd" 返回 字符串 “aw”;一個容易被忽略的bug

++ bug != 就會 string isempty app xxx ets

代碼如下: 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