如果我有3个字符串变量,string1 string2和string3,我会怎样做?根据用户输入,这些变量中的一些可能是空的?我想将这些变量与我已设置的另外3个变量进行比较,除非相应的字符串(string1 / string2 / string3)输入为空
这个想法是这样的:
如果它们都不为空,那么:
if (o.s1.equals(string1) && o.s2.equals(string2) && o.s3.equals(string3))
如果s1是唯一的空,那么我们只比较其他2:
if (o.s2.equals(string2) && o.s3.equals(string3))
因此,如果输入的字符串为空,程序将不会检查该变量是否相等
有没有办法做到这一点,而不是一堆嵌套的if语句?我有5个变量,所以会有很多语句
对于更多上下文,我正在尝试用这个做类似于搜索功能的情况,其中有3个条件,如果所有3个字段都被填充,那么它将搜索满足所有3个条件的东西,但是如果有那些是空的然后它只会查找满足2个条件的条目,如果2是空的,它将搜索只满足那个条件的条目。
答案 0 :(得分:2)
如果“空”意味着null
,那么你可以做这样的事情......
if ((o.s1 == null || o.s1.equals(string1)) &&
(o.s2 == null || o.s2.equals(string2)) &&
(o.s3 == null || o.s3.equals(string3))) {
// ...
}
答案 1 :(得分:0)
您可以创建一个辅助函数,无论您拥有多少元素,它都可以正常工作:
public static boolean areEqual(String[] objectElements, String[] userInputStrings){
return IntStream.range(0, objectElements.length)
.allMatch(x -> userInputStrings[x].isEmpty() ||
userInputStrings[x].equals(objectElements[x]));
}
然后这样称呼:
boolean result = areEqual(new String[]{o.s1,o.s2, o.s3,o.s4,o.s5 },
new String[]{string1,string2,string3,string4,string5});
答案 2 :(得分:0)
我会为谓词检查添加一个简单的实用工具方法,仅在input
不为空时才比较值:
public static boolean nonBlankEquals(String input, String value) {
return input == null || input.isEmpty() || input.equals(value);
}
因此,客户端代码将更具可读性,您无需在if
子句中复制变量;这种比较越需要越来越重要。
if (nonBlankEquals(string1, o.s1)
&& nonBlankEquals(string2, o.s2)
&& nonBlankEquals(string3, o.s3)
&& nonBlankEquals(string4, o.s4)
&& nonBlankEquals(string5, o.s5)) {
// all inputs were blank or equal to corresponding values
}