检查 Java 中多个字符串的空值

Checking null for multiple strings in Java

只有当其余字符串包含某些内容时,如何才能检查其中一个字符串是否不为空?

这是它如何工作的一个例子,但我觉得应该有更好的方法来做到这一点。

if ((string1 != null && !string1.equals("")) && 
    (string2 == null || string2.equals("") || string3 == null || string3.equals(""))) {
        // BAD
} else if ((string2 != null && !string2.equals("")) &&
    (string1 == null || string1.equals("") || string3 == null || string3.equals(""))) {
        // BAD
} else if ((string3 != null && !string3.equals("")) &&
    (string1 == null || string1.equals("") || string2 == null || string2.equals(""))) {
        // BAD
}

有没有办法将这个逻辑浓缩成更好的方法?

编辑

如果所有字符串都为空,那很好。

如果所有字符串都不为空,也可以。

如果至少有一个不为空且至少有一个为空,则不正常。

样本

public static void main(String []args){
     
    String string1 = "1";
    String string2 = "2";
    String string3 = "3";

    String stringA = "";
    String stringB = "";
    String stringC = "";

    String stringQ = "1";
    String stringW = "2";
    String stringY = "";

    // THIS IS FINE         
    System.out.println(isGood(string1, string2, string3));

    // THIS IS FINE         
    System.out.println(isGood(stringA, stringB, stringC));

    // THIS IS NOT FINE         
    System.out.println(isGood(stringQ, stringW, stringY));

}
 
public static boolean isGood (String ... strings) {

    long nullCount = Arrays.stream(strings)
        .filter(s -> s == null || s.isEmpty())
        .count();

    return strings.length == nullCount || nullCount == 0;
}

您可能会受益于 Java

中的可变参数
if( badStrings( string1, string2, string3 ) ) {
   // bad
}

public boolean badStrings( String ... strings ) {
  for( int i = 0; i < strings.length; i++ ) {
     if( strings[i] != null && !strings[i].isEmpty() ) {
        return false;
     }
   }
   return true;
}

It is not fine only when at least one is not null and at least one is null.

好的,让我们试试这个。

public boolean badStrings( String ... strings ) {
  int count = 0;
  for( int i = 0; i < strings.length; i++ ) {
     if( strings[i] != null && !strings[i].isEmpty() ) {
        count++;
     }
   }
   return !(count == 0 || count == strings.length-1)
}

代码未经测试。

根据我对您在评论中的要求的理解,这应该可行。

计算 null(或非 null,两种方法都有效)的数量。然后将其与传递给该方法的字符串数量进行比较。如果计数既不是列表的长度也不是 0 那么这意味着存在非空或空字符串与空或空字符串的混合(表明它是坏的)。

public static boolean badStrings (String ... strings) {

    var nullCount = Arrays.stream(strings)
            .filter(s -> s == null || s.isEmpty())
            .count();

    return nullCount < strings.length && nullCount > 0;
}

注意 count returns longlength 数组的方法将 return 和 int.