2014-04-14 54 views
2

我想查找一個utility是否在utilities之一。推薦使用逗號分隔字符串查找單詞的方法?

我有一個JUnit測試如下

@Test 
public void testUtilityInUtilities() { 
    final String utilities = "Pacific Gas & Electric (PG&E),San Diego Gas & Electric (SDG&E), Salt River Project (SRP),Southern California Edison (SCE)"; 
    final String utility = "San Diego Gas & Electric (SDG&E)"; 
    assertTrue(utilities.contains(utility)); 
} 

這是個好足夠的測試?還是我應該做類似於以下的事情?

String[] splitString = (utilities.split(",")); 
for (String string : splitString) { 
    if (string.equals(utility)) {return true;} 
} 
return false; 

推薦哪種方法? 拆分包含還是別的?

回答

3

contains的方式更快,但容易出現誤報:它會匹配子字符串,即"Gas & Electric",即使實際字符串爲"Pacific Gas & Electric (PG&E)"。您可以通過要求比賽周圍的點位於字符串末尾或逗號處來防止這種情況。您可以改進第一種方法,方法是從由結束標記構成的正則表達式搜索字符串(即,逗號,$^)構造正則表達式以要求完全匹配。

split的方式更可靠,但這樣做很浪費:您最終會創建一個完整的子串數組,只檢查是否存在單個字符串,然後丟棄其餘的。

總的來說,我更喜歡第一種方法,因爲它不是浪費,因爲性能很重要。但是,如果稍後運行此方法,基於split的方法更易於編碼和讀取。

0

對於您提到的包含應該足夠的情況。 Split會不必要地創建一個你沒有用於數據處理的附加數組(至少在上面提到的代碼中)。

另外一點,你需要考慮的是你將在給定的字符串中執行多少次搜索。如果您在實用程序字符串中對字符串實用程序執行多個搜索,則應該考慮使用更復雜的數據結構以啓用多個快速搜索,例如:後綴樹。

相關問題