簡體   English   中英

檢查字符串是否為null或為空,有時為null,有時為null

[英]Check if a String is null or empty when it's null sometimes and sometimes not

好吧,我通常不寫這類問題,但即使檢查了一下:

Java,檢查字符串是否不為null且不為空? 並且檢查Java中字符串是否為空或null

我的程序創建了一個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

如果字段為空或為空,是否還有其他比較方法

這是我比較這三種可能性的示例:

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
}

如果字段為空或為空,是否還有其他比較方法

您可以簡單地使用如下幫助方法:

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

這會使您的代碼更具可讀性。

寫吧

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

情況1:sSPA.getNotes()為null,第一個表達式的值為true。 因此,如果正在執行案件

情況2:sSPA.getNotes()不為null但為空第一個表達式為false,第二個表達式被求值。 因為sSPA不為null,所以第一個子表達式通過並且sSPA.getNotes.isEmpty()返回true。 整體表達式為true-> if case被執行。

情況2:sSPA.getNotes()不為null也不為空除!= null情況外,每個表達式的計算結果均為false。 總體而言,完整條件為false-> if case不執行。

我認為檢查空指針的最佳選擇是

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

}else{

//null

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM