string的动态if语句

时间:2018-01-28 22:20:45

标签: java string if-statement

如果我有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是空的,它将搜索只满足那个条件的条目。

3 个答案:

答案 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
}