2013-03-25 73 views
0

我試圖找到一個字符串中的單詞。但是,由於一段時間它不能識別一個詞。我試圖刪除標點符號,但它似乎沒有效果。我在這裏錯過了什麼嗎?這是我正在使用的代碼行:s.replaceAll(「([a-z] +)[?:!。,;] *」,「$ 1」);刪除標點符號問題

String test = "This is a line about testing tests. Tests are used to examine stuff"; 
    String key = "tests"; 
    int counter = 0; 


    String[] testArray = test.toLowerCase().split(" "); 

    for(String s : testArray) 
    { 
     s.replaceAll("([a-z] +) [?:!.,;]*","$1"); 
     System.out.println(s); 
     if(s.equals(key)) 
     { 
      System.out.println(key + " FOUND"); 
      counter++; 
     } 
    } 

    System.out.println(key + " has been found " + counter + " times."); 
} 

我設法找到一個解決方案(儘管可能不是理想的)通過使用S = s.replaceAll( 「\ W」, 「」);感謝大家指導如何解決這個問題。

+0

看看這個問題,選擇答案: [http://stackoverflow.com/questions/767759/occurences-of-substring-in-a-string][1] [1]:http://stackoverflow.com/questions/767759/occurences-of-substring-in-a-string – 2013-03-25 16:00:22

回答

1

你也可以利用分割操作中的正則表達式。試試這個:

String[] testArray = test.toLowerCase().split("\\W+"); 

這將分裂的撇號,所以你可能需要用字符的具體名單來調整它一下。

+0

謝謝,也有類似的答案 – Calgar99 2013-03-25 16:23:35

1

Strings是不可變的。您需要的replaceAll結果分配給新String

s = s.replaceAll("([a-z] +)*[?:!.,;]*", "$1"); 
         ^

而且您正則表達式需要一個空間的字和標點之間。在tests.的情況下,這是不正確的。你可以用一個可選的(零個或多個)字符來調整你的regex來解決這個問題。

+0

我試過這也是無濟於事。 – Calgar99 2013-03-25 15:56:04

+0

如果還試過「」 – Calgar99 2013-03-25 15:57:51

0

你的正則表達式似乎並不像你想要的那樣工作。 如果你想找到一些東西,之後有一段那麼這將工作

([a-z]*) [?(:!.,;)*] 

返回「測試」。當它在給定的字符串上運行時。

而且

[?(:!.,;)*] 

只是指出這將然後可以更換的標點符號。

但是我不知道你爲什麼不使用substring()函數。