如何检查字符串数组中的元素是否为空?这是我的示例数组:
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
也是。
答案 0 :(得分:5)
你有没有试过'显而易见':
if(correct[0] != null && correct[0].length() > 0) {
//it is not null and it is not empty
}
答案 1 :(得分:1)
只需将它与null
进行比较,if (correct[0] != null && correct[0].length() > 0)
是某种对象类型数组的默认值。
&&
如果左侧为true
,correct[0]
运算符仅评估右侧,即null
不是NullPointerException
且不会抛出{{1} }}
答案 2 :(得分:1)
如果您尝试检查特定位置中的特定元素是否为空(不仅与null
不同,而且与""
不同),则所提供的解决方案还不够。
Java有很多方法可以做到这一点。让我们看看其中一些:
您可以将数组转换为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("");
}
}
也可以使用Collections's disjoint
方法检查两个集合是否有共同的元素:
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) //
);
}
}
如果您能够使用 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
}
答案 3 :(得分:0)
好吧,如果你不能使用isEmpty尝试使用Array.Contains(null)或尝试这个小循环
for(int i = 0;i<=Array.length;i++){
if(array[i] > 0 && array[i] != null){
//yay its not null
}
}
答案 4 :(得分:0)
有类似版本,其中参数的数量可能更大
if (Arrays.asList(new String[] {productId, productTitle, imageName, productPrice}).contains(null)) {
return null;
}
答案 5 :(得分:-1)
仅使用isAnyEmpty
org.apache.commons.lang3
StringUtils.isAnyEmpty(final CharSequence... css)