检查 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 long
和 length
数组的方法将 return 和 int
.
只有当其余字符串包含某些内容时,如何才能检查其中一个字符串是否不为空?
这是它如何工作的一个例子,但我觉得应该有更好的方法来做到这一点。
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 long
和 length
数组的方法将 return 和 int
.