2012-10-24 67 views
0

我想找到的話正則表達式字基於例如搜索字符串 (這意味着空格前後):如何查找包含在Java

String s = "sdaaf fd hgfaaf ghjfada dgffaasdf"; 

,我想找到的所有詞包含字符串"aa" 答案是的話:

"sdaaf" , "hgfaaf" , "dgffaasdf" 
+0

這個問題不適合正則表達式。 – Woot4Moo

+0

@ Woot4Moo是什麼讓你認爲這是因爲解決問題有一種更直接的方式。 – Anirudha

+0

@ Fake.It.Til.U.Make.It。正則表達式有它的位置,但有更直接和簡單的解決方案。我理解在某些場景中使用正則表達式的願望,但這不值得。 – Woot4Moo

回答

2

你不通過正則表達式解決這個問題,因爲有一個更直接的方式去了解它。

String phrase = "aa"; 
String s = "sdaaf fd hgfaaf ghjfada dgffaasdf"; 
String[] words = s.split(" "); 
List<String> wordList = new ArrayList<String>(); 
for(String word : words) 
{ 
    if(word.contains(phrase)) 
    { 
     wordList.add(word); 
    } 
] 
+0

你打了幾秒鐘。 :( –

+0

@RohitJain這沒關係,在這裏的西方政策沒有最快的槍:) – Woot4Moo

+0

是的,當然它沒有,直到你的答案是有道理的。 :) –

0

按照以下步驟依次把所有的單詞,"aa": -

  • 分割空間的字符串 - 使用String#split方法用於這一目的。這會給你一個String數組,所有的元素都由空格分隔。然後遍歷你的String數組。

  • 對於每個元素,檢查它是否包含您的序列"aa" - 爲此使用String#contains方法。

  • 對於每個包含「aa」的元素都會打印它們,或者您可以將它們添加到ArrayList,您必須事先創建它們。
0

這是採用符合你的每一個字的正則表達式的完整解決方案:

final String input = "asdf ljh poiu ddaa aad aa", strToMatch = "aa"; 
final Matcher m = Pattern.compile(
    String.format("\\w*?%s\\w*", Pattern.quote(strToMatch))).matcher(input); 
while (m.find()) System.out.println(m.group()); 
+0

是\\ b必要? OP可以不只是分裂在\\ w(word) – Woot4Moo

+0

真。會改變。但是出發點\\ b有必要確保比賽從單詞邊界開始,不是嗎? –

+0

我會覺得這個函數會收到一個字符串。 I.E. foo(String toProcess,String toMatch)。就我所知,這不需要\\ b。正則表達式不是我強大的套裝fwiw – Woot4Moo

1
String regex = "(\\w+aaa\\w+)+"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher("helaaalo woraaald how are you toaaaday"); 

while (matcher.find()) { 
    System.out.print(matcher.group() + " "); 
} 

的輸出繼電器是:helaaalo woraaald toaaaday

你可以改變模式適合您的需求。

+0

\\ b沒有必要。 – Woot4Moo

+0

@ Woot4Moo你說得對,模式'(\\ w + aaa \\ w +)+'也適用。 –