当前位置: 首页 > 知识库问答 >
问题:

字符串的动态if语句

毛景曜
2023-03-14

如果我有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个答案

公羊浩气
2023-03-14

我将为谓词检查添加一个简单的实用方法,该方法仅在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
}
邹缪文
2023-03-14

您可以创建一个助手函数,该函数无论有多少个元素都可以工作:

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});
松铭
2023-03-14

如果“empty”的意思是null,那么你可以这样做。。。

if ((o.s1 == null || o.s1.equals(string1)) &&
    (o.s2 == null || o.s2.equals(string2)) &&
    (o.s3 == null || o.s3.equals(string3))) {
    // ...
}
 类似资料:
  • 问题内容: 我试图在z DBOpenHelper扩展SQLOpenHelper类中编写一个方法。它应该评估数据库中是否存在相同名称的条目。 这是Contact类的相关部分: 现在这是奇怪的事情: 方案A:其中和 等于false。Eclipse调试器显示名称的foo和cname的foo具有不同的id。这两个变量都按之前在代码中所示填充。 方案B:像这样加载变量的地方: 方案C:等于true …但是…

  • Sds (Simple Dynamic String,简单动态字符串)是 Redis 底层所使用的字符串表示, 几乎所有的 Redis 模块中都用了 sds。 本章将对 sds 的实现、性能和功能等方面进行介绍, 并说明 Redis 使用 sds 而不是传统 C 字符串的原因。 sds 的用途 Sds 在 Redis 中的主要作用有以下两个: 实现字符串对象(StringObject); 在 Re

  • 问题内容: 我的数据如下所示: 我给我一个字符串列表作为 但是,当我传递给时,它仅返回带有的数据,这是列表中的第一个元素。 我想知道是否有人对此有何想法?任何帮助,将不胜感激! 问题答案: 由于我相信R DBI驱动程序尚未实现多个SQL语句支持,因此仅返回第一条语句。 因此,您需要为多个SQL语句迭代运行 sqlcmd ,例如使用with返回数据帧列表,然后调用单个主数据帧: 或者,对一个SQL语

  • 尝试基于列值替换字符串,获取错误值error:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。 获取错误值错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。 我只需要检查字符串,如果匹配,则用另一个列值替换它

  • 我试图让一个语句起作用,但由于某些原因,它不起作用。应该很简单。 假设字符串 我的代码是: 两种规格的结果都是1。

  • 我想在Java中通过反射调用一个方法。 我手边有我要调用的方法的Method实例(这样我就可以获得它的参数的类型),此外,我还有这些参数的值作为字符串。 我有一个假设,所有的参数都必须是原语。 例如,如果我要调用以下方法: