【问题标题】:Check if a String is null or empty when it's null sometimes and sometimes not检查字符串是否为空或空时有时为空,有时不为空
【发布时间】:2015-03-27 20:42:15
【问题描述】:

好吧,我通常不会写这种问题,但即使在检查之后:

Java, check whether a string is not null and not empty?Checking if a string is empty or null in Java

我的程序使用原始合同和修改后的合同中已更改的信息创建一个 PDF,但只有这些信息。如果两个合同中的信息相同,则不会绘制。但如果不是,那么它会绘制它。

当两个合同中都有一些东西时,我没有问题,例如笔记。

如果他们在原始合同上没有写任何东西,但他们在修改(背书)上做了,那么系统不应该在备注字段上绘制任何内容。如果他们写了一些东西并在修改时将其删除,则相同。这就是问题所在。

当我尝试比较时:

if ((sSPA.getNotes() == null ||
     sSPA.getNotes().length() == 0) &&
    (sSPE.getNotes() != null ||
     sSPE.getNotes().length() != 0)) {
    //Some stuff here
}

我也试过了

if ((sSPA.getNotes() == null ||
     sSPA.getNotes().equals("")) &&
    (sSPE.getNotes() != null ||
     !sSPE.getNotes().equals(""))) {
    //Some stuff here
}

if ((sSPA.getNotes() == null ||
     sSPA.getNotes().isEmpty()) &&
    (sSPE.getNotes() != null ||
     !sSPE.getNotes().isEmpty())) {
    //Some stuff here
}

我在登录执行时收到以下错误:

java.lang.NullPointerException
at com.dnhr.rwa.server.document.PdfEndorsement.renderSubscriptionSubmissionProp(PdfEndorsement.java:1545)

而且我知道这是因为该字段是 null,我正在尝试获取它的长度,或者将其与空字符串进行比较,并且它正在尝试这样做:

if (null.equals("")) { 并抛出与length() 方法相同的异常。

如果我尝试这样做:

if ((sSPA.getNotes() == null ||
     getStringValue(sSPA.getNotes().equals(""))) &&
    (sSPE.getNotes() != null ||
     !getStringValue(sSPE.getNotes().equals("")))) {
    //Some stuff here
}

它在编译时返回以下错误:

[javac] /home/efrain/proyectos/rwa-test/trunk/src/com/dnhr/rwa/server/document/PdfEndorsement.java:1541: error: bad operand types for binary operator '||'
[javac]     if ((sSPA.getNotes() == null ||
[javac]                                       ^
[javac]   first type:  boolean
[javac]   second type: String

是否有其他方法可以比较该字段是否为空或为空

以下是我如何比较这 3 种可能性的示例:

if((sSPA.getNotes() == null || sSPA.getNotes().trim().equals("")) &&
    (sSPE.getNotes() != null || !sSPE.getNotes().equals(""))) {
    //some stuff
} else if(!getStringValue(sSPA.getNotes()).
      equals(getStringValue(sSPE.getNotes())) &&
      (sSPE.getNotes() == null || 
       sSPE.getNotes().trim().equals(""))) {
        //some stuff
} else if(!getStringValue(sSPA.getNotes()).
      equals(getStringValue(sSPE.getNotes()))) {
        //some stuff
}

【问题讨论】:

  • 你试过调试吗?如果您收到 NullPointerException,则可能 sSPA 或 sSPE 为 null。

标签: java string null compare


【解决方案1】:

是否有其他方法可以比较该字段是否为空或为空

您可以简单地使用这样的辅助方法:

static boolean nullOrEmpty(Stirng s) {
  return s == null || s.isEmpty();
}

这将使您的代码更具可读性。

【讨论】:

  • 这个。其他答案非常复杂。
  • 只记得接受。这真的很有帮助。谢谢 C:
【解决方案2】:

随便写

if( sSPA.getNotes() == null ||
    (sSPA.getNotes() != null && sSPA.getNotes().isEmpty()) ... 

案例 1:sSPA.getNotes() 为空 第一个表达式的计算结果为真。因此,如果正在执行案例

案例 2:sSPA.getNotes() 不为 null 而是为空 第一个表达式为假,因此第二个被评估。因为 sSPA 不为 null,所以第一个子表达式通过并且 sSPA.getNotes.isEmpty() 返回 true。整体表达式为真 -> if case 被执行。

案例 2:sSPA.getNotes() 不为空且不为空 除了 != null 情况外,每个表达式的计算结果都为 false。总体而言,完整条件为 false -> if 案例未执行。

【讨论】:

  • A || (!A && B) == A || B
  • 再次阅读我的答案后,它看起来比我写它时要复杂得多。但基本上答案应该有效。我同意@tomse。他的代码更具可读性和逻辑性。
【解决方案3】:

我认为检查空指针的最佳选择是

if(sSPA.getNotes()!=null && sSPA.getNotes().trim().length()>0){

}else{

//null

}

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 2012-07-29
    • 2020-05-29
    • 2017-08-19
    • 1970-01-01
    • 2019-01-25
    • 2015-06-12
    • 2011-04-05
    • 2017-01-10
    相关资源
    最近更新 更多