2011-05-31 59 views
2

如何在使用pattern.compile時處理NULL?我使用下面的行比較字符串如何處理pattern.compile中的空值?

if(Pattern.compile(Pattern.quote(s2), Pattern.CASE_INSENSITIVE).matcher(s1).find()) 

有些情況下,S1可以爲NULL,顯然它拋出空指針異常。我知道這可以通過對s1的另一個「如果」條件來處理。但我想知道任何其他備用解決方案嗎?

EDIT

Iterator iter = sampleList().iterator(); 
while (iter.hasNext()) { 
    SampleObj so = (SampleObj) iter.next(); 
    if (!s1.equalsIgnoreCase("")) { 
     if (Pattern.compile(Pattern.quote(s1), Pattern.CASE_INSENSITIVE).matcher(so.getS1()).find()) 
      match = true; 
     else 
      match = false; 
    } 
    if (!s3.equalsIgnoreCase("")) { 
     if (Pattern.compile(Pattern.quote(s3), Pattern.CASE_INSENSITIVE).matcher(so.getS3()).find()) 
      match = true; 
     else 
      match = false; 
    } 
} 

S1和S3是它們匹配超過迭代器的輸入。

+2

@你的情況下'null'的預期行爲是什麼? – Dewfy 2011-05-31 11:57:18

+0

@Dewfy雖然它是空的,我希望不會拋出空指針異常。我希望沒有明確的「如果」條件應該寫入檢查null – Samrat 2011-05-31 12:13:39

+0

我不知道爲什麼你會這樣寫它首先。 Pattern.compile()應該被調用一次,而不是每次使用該模式。這是整個想法。編譯昂貴,使用便宜。如果您需要每次都重新編譯,也就是說,如果正則表達式是動態的,那麼您最好使用Pattern.matches()。 – EJP 2011-05-31 23:22:44

回答

4

Pattern.matcher()總會拋出一個NullPointerException當你null傳遞,所以:沒有,沒有別的辦法,你必須檢查null明確。

+0

謝謝你的回答讓我明白了 – Samrat 2011-05-31 12:00:38

+0

Java拒絕將null作爲Pattern類的一部分來檢查http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6178785 – 2016-11-16 07:33:25

7

你必須檢查null;例如,

if(s1 != null && Pattern.compile(Pattern.quote(s2), Pattern.CASE_INSENSITIVE).matcher(s1).find())) 
+1

有兩種可能的方式's1 == null' *應該*執行'if'-body,否則它不應該。你發佈了第二種可能性,首先你會用'if(s1 == null || Pattern ....'。 – 2011-05-31 11:59:35

+0

非常正確。我假定's2'模式不匹配null ',但這就是OP的呼叫 – Ray 2011-05-31 12:02:29