2014-01-17 34 views
1

我有一個ArrayList的字符串,我想對它們執行搜索方法。 到目前爲止,我只有這個:用「?」搜索字符串作爲一個小丑?

public void searchNote(String searchCertainNote) 
{ 
    for (String note: notes) 
    { 
     if (note.contains(searchCertainNote)) 
     { 
      System.out.println(note); 
     } 
    } 
} 

我想通過允許用戶搜索像一個字符串,以改善該搜索方法的位:

字符串searchCertainString =「?A C」 。可能的搜索結果:「abcd」; 「A4C」; 「Abc」,「a22c」,「a $ c」等...

問號「?」應該代表所有在那裏的角色。

我做了一些谷歌搜索和發現,我可以使用正則表達式和String.matches()實現此...

但我仍然需要你的幫助這個!

感謝=)

+0

用戶是否允許使用其他特殊字符,比如'{OR [OR *或$'? – anubhava

+2

可能的重複:http://stackoverflow.com/questions/1247772/is-there-an-equivalent-of-java-util-regex-for-glob-type-patterns – ccleve

+0

除了正則表達式和String.matches(),你也可以推出自己的。 – pamphlet

回答

0

這樣做:

if(searchCertainNote.length <= 0) { 
    // String is empty, do something 
    return; 
} 

for(int i = 0; i < searchCertainNote.length; i++) { 
    if(searchCertainNote.charAt(i) == 'a') { 
     if(searchCertainNote.length >= ((i + 1) + 1))) { 
      if(searchCertainNote.charAt(i + 2) == 'c') { 
       System.out.println(searchCertainNote.charAt(i) + searchCertainNote.charAt(i + 1) + searchCertainNote.charAt(i + 2)); 
       return; 
      } 
     } else { 
      // Not found, so do something 
      return; 
     } 
    } 
} 

您可以在此代碼完全信任。如果在任何你輸入並返回的字符串中找到了它,它將打印屏幕以顯示一個?c,否則它會做你想要的和返回的東西。它還檢測空和太短的字符串,並避免ArrayIndexOutOfBoundsException。祝你好運:D。

+0

我不認爲這與問題有什麼關係 – thumbmunkeys

2

如果用戶將輸入'?'作爲通配符(或者你稱之爲小丑),那麼,如果你使用正則表達式,你需要轉換'?'至 '。'在正則表達式中使用它。在正則表達式中,這個時間段匹配任何單個字符。

因此,您需要將用戶輸入的「a?b」更改爲「a.b」。

如果'?'是爲了匹配至少一個字符,但可能多於一個,然後使用'。+'代替。 '+'是一個限定詞,意思是'前面的一個或多個事物'。

因此,您需要將用戶輸入的「a?b」更改爲「a。+ b」。該模式將匹配「axb」「axyb」,但不匹配「ab」。

這裏是一個很好的初學者對Java的正則表達式處理指南:

http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

+0

正則表達式有更復雜的語法,所以你也需要轉義其他字符 –