2017-05-17 42 views
1

有一個字符串的HashSet,我想搜索關鍵字。該HashSet的內容看起來像使用正則表達式搜索HashSet

AB 
A1-A2-A3 
A1 
A2-A3 
AD-A1 
AZ 
... 

如果我使用theSet.contains("A1"),那麼它只會返回A1。但是,我想獲得A1-A2-A3A1AD-A1。我的數據文件中的特殊字符是-,這是分隔符,以防一行包含該分隔符。

如果我不使用HashSet並在字符串數組內搜索,那麼我知道如何使用matcher()。任何解決方案的HashSet?

+0

只是循環遍歷集合,檢查每個元素是否匹配 – lucasvw

+1

請記住,HashSet由散列表支持。這意味着沒有搜索HashSet的概念。您只能根據您已有的已知密鑰執行查找。使用正則表達式意味着你想要線性掃描HashSet,因此你需要迭代......這是沒有辦法的。 –

+0

[(。* - ?A \ d)](https://regex101.com/r/Lu1k9m/1) –

回答

6

沒有比遍歷整個HashSet更好的解決方案,並在每個元素上運行匹配器。

for (String str : set) { 
    if (str.contains("A1")) { 
    // do whatever with str 
    } 
} 
+0

所以,我只是想看到有可能通過HashSet使用「時間減少」搜索字符串數組。 – mahmood

+0

這可能會返回誤報,因爲它不檢查分隔符。 – shmosel

+0

@mahmood:不是。 –

0

那麼,你可以嘗試像...

採取所有的鑰匙,並構建一個很長的醜的串

,AB,A1-A2-A3,A1,A2-A3,AD-A1,AZ,... 

然後做一個找到的所有正則表達式的「類」對於A1:

uglystring = ",AB,A1-A2-A3,A1,A2-A3,AD-A1," 
thelist = re.findall("([^,]*A1[^,]*)", uglystring) 
print (thelist) 

這是在python中。很醜,但也許你會朝着正確的方向前進?