[英]equality check between CharSequence and String objects with possible null values in java
我有一個CharSequence
對象和一個String
對象。 我想將相等性檢查(不區分大小寫)與可能的null
值進行比較。 我使用嵌套的if
語句,它不是那么干凈和優化的。 問題是我無法在null
CharSequence對象上調用toString()
。 如何實現平等檢查?
不會有太多復雜的代碼,也不會嵌套if
。 下面應該做的。
if(Objects.equals(charSeq,str) || (charSeq !=null && str !=null && charSeq.toString().equalsIgnoreCase(str))) {
// todo
}
據我了解您的問題,是這樣的:您有兩個對象,並且想查看它們是否相等。
我們想要做的是使用String.equalsIgnoreCase()
。 這正是您想要的。 如果CharSequence對象不為null,則非常簡單,因為CharSequence.toString()
返回的字符串具有完全相同的字符,並且順序完全相同。
charSequence.toString().equalsIgnoreCase(otherString);
不幸的是,這不起作用。 如果charsequence為null,則拋出NullPointerException。 因此,我們需要查看字符序列是否為空,然后從那里繼續。
public boolean compareCSAndString(CharSequence cs, String string) {
if(cs == null) {
// If both are null, then they're equal
return string == null;
}
else {
return cs.toString().equalsIgnoreCase(string);
}
}
這打勾了所有框:
直接使用equals()
將不起作用,因為CharSequence
子類之間的equals()
不可互操作。
您可以將toString()
方法用作CharSequence
子類之間的橋梁,因為在某些情況下(例如String
和StringBuilder
)它可以互操作,但並非在所有情況下都可以。
例如,在CharBuffer
對象上調用toString()
可能會給出特定的結果,因為CharBuffer.toString()
依賴於緩沖區的當前位置。
為了獲得一致的結果,我認為您沒有其他選擇,首先檢查傳遞的對象的類型,然后執行比較:使用toString()
作為StringBuilder/StringBuffer
橋梁並以其他方式處理其他類型。
為了進行橋比較,假設您只希望將StringBuilder
或String
作為子類:
public boolean compareContent(CharSequence charSequence, String string) {
if (!(charSequence instanceof StringBuilder || charSequence instanceof String){
// Exception, logging, more customized comparison or return false
}
return charSequence.toString().equalsIgnoreCase(string));
}
if (charSeq == str || (charSeq != null && str != null && charSeq.toString().equalsIgnoreCase(str))) {
// todo
}
charSeq == str
處理兩個均為null的情況(只有這種情況,因為它們屬於不同的類,因此無法標識相同的對象引用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.