2012-04-13 20 views
0

我有一組特定的文件diretory。正則表達式檢索文件中的單詞

從目錄中的所有文件(文本文件)中檢索內容後,我有一個 字符串列表。

每個字符串元素表示從每個文件中檢索到的內容。因此,列表中的第一個String元素表示來自第一個文件的內容。

現在我想分割字符串來獲取單詞(後面的單詞存儲成一個字符串數組) 1)單詞可以用單個空格/多個空格分隔。 2)句子以'。'結尾,所以一個新單詞可以在'。'之後開始。 3)一個新的單詞可以在'\ n'之後開始

那麼任何人都可以提出一個適合split()方法的正則表達式嗎?

+0

這可能是非常類似的問題:http://stackoverflow.com/questions/2159026/regex-how-to-get-words-from-a-string-c – wlk 2012-04-13 10:58:39

+0

但它在C#中,而不是在Java – 2012-04-13 11:19:06

回答

0

您可能不需要regexp,只需從文件中刪除每個非字母字符,然後使用Tokenizer讀取每個單詞。

+0

「-'是一個非字母字符。似乎不應該刪除它。另外,如果您刪除所有非字母字符,則最終會生成一個非常長的單詞。 – 2012-04-13 11:13:43

+0

我檢索了文件內容作爲字符串列表,其中每個元素代表單個文件內容。現在,如果我在split()方法中使用分隔符,那麼我應該在分隔符處替換什麼? – 2012-04-13 11:15:32

+0

@John B,Wojtek可能是通過檢測非字母字符來跟蹤單詞。 – 2012-04-13 11:17:10

4

也許StringTokenizer類更適合您的需要。構造函數將字符串轉換爲標記,並使用分隔符列表(在您的情況下:空格,。和換行符)。

+0

根據'StringTokenizer'javadocs:'StringTokenizer是一個遺留類,爲了兼容性原因被保留,雖然它在新代碼中的使用不受歡迎。建議任何尋求這種功能的人都使用String或java.util.regex包的拆分方法。' – 2012-04-13 11:17:11

-1

我建議使用令牌爲此...簡單地通過每個字符,並根據字符是什麼決定做什麼。下面是僞代碼

string word = ""; 

while (EOF){ 

    char = getNextChar() 

    if (char not space or full-stop){ 
     append the char to the word 
    } 
    else { 
     if (the word is empty){ continue /* ignore multi space */ } 
     else { 
      add the word to an array of words 
      reset the word to "" 
     } 
    } 
} 

這樣,你有你處理數據的方式完全控制 - 你不必擔心瘋狂的場景與在正則表達式規則包括。最重要的是,這是最有效的方式(比正則表達式更好),並且只需傳遞一次數據。

+0

已經有很多工具可以用來完成這個工作。我不會鼓勵重新發明輪子。 – 2012-04-13 11:12:40

1
String[] result = myString.split("[\\.\\s]");