2011年6月2日木曜日

Android null もしくは 0 length を判定する

文字列が null か 0-length の場合と、それ以外の場合で処理を分けたい場合
null 判定と String.length の判定を使って

  1. @Override  
  2. public void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     setContentView(R.layout.main);          
  5.           
  6.     Log.d("[checkLength] null", isNullOrZeroLength(null) + "");  
  7.     Log.d("[checkLength] length 0", isNullOrZeroLength("") + "");  
  8.     Log.d("[checkLength] length 5", isNullOrZeroLength("Hello") + "");  
  9. }  
  10.    
  11. public boolean isNullOrZeroLength(String s) {  
  12.     if(s == null) {  
  13.         return true;  
  14.     }  
  15.     else if(s.length() == 0){  
  16.         return true;  
  17.     }  
  18.     else {  
  19.        return false;  
  20.     }  
  21. }  


とやればできますが、android.text.TextUtils.isEmpty(CharSequence str) を使えば null と 0-length 両方を判定してくれます。
このメソッドは引数の str が null もしくは 0-length の場合に true を返します。
このメソッドを使って書き換えると

  1. @Override  
  2. public void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     setContentView(R.layout.main);          
  5.           
  6.     Log.d("[TextUtils] null", isNullOrZeroLength(null) + "");  
  7.     Log.d("[TextUtils] length 0", isNullOrZeroLength("") + "");  
  8.     Log.d("[TextUtils] length 5", isNullOrZeroLength("Hello") + "");  
  9. }  
  10.    
  11. public boolean isNullOrZeroLength(String s) {  
  12.     return TextUtils.isEmpty(s);  
  13. }  


それぞれの出力

D/[checkLength] null(22715): true
D/[checkLength] length 0(22715): true
D/[checkLength] length 5(22715): false
D/[TextUtils] null(22715): true
D/[TextUtils] length 0(22715): true
D/[TextUtils] length 5(22715): false



  

2 件のコメント:

  1. String.isEmptyはjava6だから諦めてましたが、TextUtilsにあるのは知らなかったです。ありがとうございます^^

    返信削除
  2. API Level 9 から String.isEmpty() も追加されてます。
    http://developer.android.com/reference/java/lang/String.html#isEmpty()

    null も判定してくれるのかどうかまではチェックしてません ><

    返信削除