2016-04-03 16 views
1

我正在爲學校開展大數據分配並使代碼正常工作我需要從文本文件中過濾出單詞。即使很少發生Java過濾器文件也不會出現空格

Ofcourse我讀取文件並使用replaceAll(「[^ a-zA-Z0-9]」,「」)不需要的東西進行過濾。

但這會帶來一個問題。因爲我對空間的過濾也有一些特殊情況,如:

wobbewy!'--'Wobbewy,' 

我得到的話,如:

wobbewywobbewy 

反正是有關於空間過濾的話,也過濾掉這些特殊情況未做像大量的if語句?

while ((thisLine = bufferedReader.readLine()) != null) { 
     String[] woord = thisLine.toString().trim().split("\\s+"); 
     for(int i=0; i<woord.length; i++){ 
      normalWord = woord[i].replaceAll("[^a-zA-Z]+", " "); 
      normalWord = normalWord.toLowerCase(); 

然後我得到outpuit像:

XXV(多空格)我

+1

爲什麼不使用(「[^ a-zA-Z0-9]」,「」),所以!' - '將被替換爲空格並且按空格分隔將起作用。或者:不要替換任何內容,並使用正則表達式搜索單詞,例如使用\ w +模式。 – kevcodez

+0

當處理不使用空格分隔單詞的語言時,整個問題當然會變得更糟。在某些語言(泰語,IIRC?)中,簡單地將一段文本分解爲單詞需要一個字典和一個遞歸回溯算法。 –

回答

0

拆分消耗的「非字」字符的輸入,所以分:

String[] woord = thisLine.trim().split("[^a-zA-Z0-9']+"); 

通知我加了撇號的字符保持,這將讓像「不」被作爲一個詞處理。

1

在拆除特殊字符,您的信息正在發生的事情後,我試圖修復的

示例代碼關於單詞邊界會丟失。

更改replaceAll("[^a-zA-Z0-9]", "");replaceAll("([^a-zA-Z0-9]|\s)+", " ");(將特殊字符和空格替換爲單個空格)。

+0

這將爲OP的示例創建五個空格。我更喜歡''[^ a-zA-Z0-9] +「',然後按空格分割。 – nyname00

+0

@ nyname00我更新了我的答案 – slartidan

+0

這個例子沒有工作,並給出了一個錯誤=) 可能是我雖然但如何將這項工作在以下情形?: 而((thisLine = bufferedReader.readLine())! ='){ \t String [] woord = thisLine.toString()。trim()。replaceAll(「([^ a-zA-Z0-9] | \\ s)+」,「」); \t對(INT I = 0; I Tvt

相關問題