0

文字列配列の要素が空かどうかを確認するにはどうすればよいですか? これは私の例の配列です:

private static String correct[] = new String[5];
    static {
        correct[1] = "some texT";
        correct[2] = "some texT3";
        correct[4] = "some texT2";
}

残りの要素に割り当てることはできますがnull、これを行うための別のより良い方法を見つけたいと考えています。を見つけましisEmptyたが、API 9 以降でのみ使用できます。

if(correct[0].length() > 0) NPEをくれます。 if(correct[0] != nullまた。

4

6 に答える 6

6

「明白」を試しましたか:

if(correct[0] != null && correct[0].length() > 0) {
   //it is not null and it is not empty
}
于 2013-11-05T23:29:34.563 に答える
1

特定の位置にある特定の要素が空であるかどうかを確認しようとしている場合 ( と異なるだけnullでなく、と""も異なる)、提示されたソリューションは十分ではありません。

Java には、これを行う方法がたくさんあります。それらのいくつかを見てみましょう:

  1. List配列を(メソッドを使用して)に変換し、メソッドArrays's asListを介して条件を確認できます。contains()

    import java.util.*;
    
    public class Test1 {
    
      private static boolean method1_UsingArrays(String[] array) {
       return Arrays.asList(array).contains(null) 
                || Arrays.asList(array).contains("");
      }
    }
    
  2. メソッドを使用してCollections's disjoint、2 つのコレクションに共通の要素があるかどうかを確認することもできます。

    import java.util.*;
    
    public class Test2 {      
    
      private static String[] nullAndEmpty = {"", null};
    
      private static boolean method2_UsingCollectionsDisjoint(String[] array) {
       // disjoint returns true if the two specified collections have no elements in common.
       return !Collections.disjoint( //
         Arrays.asList(array), //
         Arrays.asList(nullAndEmpty) //
       );
      }
    
    }
    
  3. Java 8 (私のお気に入りのオプション) を使用できる場合は、新しいStreams APIを利用することができます。

    import java.util.stream.*;
    import java.util.*;
    
    public class Test3 {
    
      private static boolean method3_UsingJava8Streams(String[] array) {
       return Stream.of(array).anyMatch(x -> x == null || "".equals(x));
      }
    
    }
    

    他のオプションと比較して、これは、各文字列が必要な場合(または他の のメソッドのtrimいずれかを呼び出す場合) に、さらに簡単に処理できます。String

    Stream.of(array).anyMatch(x -> x == null || "".equals(x.trim()));
    

次に、それらを簡単に呼び出してテストできます。

public static void main(String[] args) {
  // Ok tests
  String[] ok = {"a", "b", "c"};

  System.out.println("Method 1 (Arrays - contains): " + method1_UsingArrays(ok)); // false
  System.out.println("Method 2 (Disjoint): " + method2_UsingCollectionsDisjoint(ok)); // false
  System.out.println("Method 3 (Java 8 Streams): " + method3_UsingJava8Streams(ok)); // false

  System.out.println("-------------------------------");

  // Nok tests
  String[] nok = {"a", null, "c"};

  System.out.println("Method 1 (Arrays - contains): " + method1_UsingArrays(nok)); // true
  System.out.println("Method 2 (Disjoint): " + method2_UsingCollectionsDisjoint(nok)); // true
  System.out.println("Method 3 (Java 8 Streams): " + method3_UsingJava8Streams(nok)); // true

  // Nok tests
  String[] nok2 = {"a", "", "c"};

  System.out.println("Method 1 (Arrays - contains): " + method1_UsingArrays(nok2)); // true
  System.out.println("Method 2 (Disjoint): " + method2_UsingCollectionsDisjoint(nok2)); // true
  System.out.println("Method 3 (Java 8 Streams): " + method3_UsingJava8Streams(nok2)); // true
}
于 2016-10-10T14:54:54.120 に答える
1

nullあるオブジェクト型の配列のデフォルト値である と比較してください。

if (correct[0] != null && correct[0].length() > 0)

&&演算子は、左側が である場合にのみ右側を評価します。trueつまり、そうでcorrect[0]はなくnull、 をスローしませんNullPointerException

于 2013-11-05T23:29:37.033 に答える