在Java中检查多个字符串的null
如何检查其中一个字符串是否不为null,只有在其余字符串包含某些内容时才可以 这是一个如何工作的例子,但我觉得应该有更好的方法在Java中检查多个字符串的null,java,string,null,Java,String,Null,如何检查其中一个字符串是否不为null,只有在其余字符串包含某些内容时才可以 这是一个如何工作的例子,但我觉得应该有更好的方法 if ((string1 != null && !string1.equals("")) && (string2 == null || string2.equals("") || string3 == null || string3.equals(""))) {
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
}
有没有办法将这种逻辑浓缩成更好的方法
编辑
如果所有字符串都为null,则可以
如果所有字符串都不是null,也可以
如果至少有一个不为null,并且至少有一个为null,则不可以
样本
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中的varargs中受益
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;
}
if(坏字符串(字符串1、字符串2、字符串3)){
//坏的
}
公共布尔字符串(字符串…字符串){
for(int i=0;i
只有当至少有一个不为null且至少有一个为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)
}
公共布尔字符串(字符串…字符串){
整数计数=0;
for(int i=0;i
代码未经测试。根据我在评论中对您的要求的理解,这应该是可行的 计算空值(或非空值,无论哪种方式都有效)的数量。然后将其与传递到方法中的字符串数量进行比较。如果计数既不是列表的长度,也不是0,则表示存在非null或空字符串与null或空字符串的混合(表示不好)
公共静态布尔字符串(字符串…字符串){
var nullCount=Arrays.stream(字符串)
.filter(s->s==null | | s.isEmpty())
.count();
返回nullCount0;
}
请注意,数组的
count
返回long
和length
方法将返回int
字符串。isEmpty()
可能比使用isEquals(“”
更有帮助。使用数组也可能会有所帮助,您可以在循环中执行此操作。我运行了此数组,它看起来仍然会转到//bad
,即使所有字符串都为null/空。如果全部为空,则可以。如果不是全部为空,也可以。只有当至少有一个不为空且至少有一个为空时,这才是不好的。感谢您再次尝试。当我使用string3
empty/null运行此命令时,它仍然无法按预期工作。它确实捕捉到了那些不存在所有变量的情况,所以这很好。投票赞成使用varargs(或者你可以做一个列表)而不是单独的变量。此外,该帖子需要更新,以澄清上述评论中提到的问题。你能不能也把样本输入输出,特别是对你来说独一无二的案例?现在都好了。我更新了这个问题。@markspace所做的与for
循环的逻辑是相同的,现在只要阅读他的答案,预期的逻辑是相同的。这个场景到底是什么。我刚刚发现string3为空/空?现在一切正常。我更新了问题。
public static boolean badStrings (String ... strings) {
var nullCount = Arrays.stream(strings)
.filter(s -> s == null || s.isEmpty())
.count();
return nullCount < strings.length && nullCount > 0;
}