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