在 Java 中比较两个 String 与可能的 null/空值,当一个为 null 另一个为空时,它将返回 true

Joh*_*nny 0 java string null java-8

寻找一种方法(也可以使用 Apache libs),将 Java 中的两个 String 与可能的 null/空值进行比较,其中主要要求是当一个为空null而另一个为空时(""),它将返回true

强调 -允许任何空/空组合,并且所有组合都将被视为一个true语句。

one   | two  | res
------|------|-----
 ""   | ""   | true
 ""   | null | true
 null | ""   | true
 null | null | true
Run Code Online (Sandbox Code Playgroud)

我在这里检查了很多相关问题,但他们没有考虑我的主要要求。

ole*_*nik 6

public static boolean isEqual(String one, String two) {
    // org.apache.commons.lang.StringUtils
    return StringUtils.defaultIfEmpty(one, "")
            .equals(StringUtils.defaultIfEmpty(two, ""));
}
Run Code Online (Sandbox Code Playgroud)

输出:

 one  | two  | res
------|------|-----
 ""   | ""   | true
 ""   | null | true
 null | null | true
Run Code Online (Sandbox Code Playgroud)

备择方案:

 one  | two  | res
------|------|-----
 ""   | ""   | true
 ""   | null | true
 null | null | true
Run Code Online (Sandbox Code Playgroud)
public static boolean isEqual(String one, String two) {
    if (one == null) one = "";
    if (two == null) two = "";    
    return one.equals(two);
}
Run Code Online (Sandbox Code Playgroud)

  • “您可以将`equals`调用和条件分开”(就像您在编辑中所做的那样)也是我在阅读您的评论后的第一个想法。请注意,旧的 `if` 也可以工作,`if(one == null) one = ""; 如果(两个==空)两个=“”;return one.equals(two);` 我同意组合条件和 `equals` 调用可能很难阅读。 (2认同)