2014-06-06 92 views
1

所以,我想要做的是編譯一個單詞列表,沒有重複出8個單獨的字典單詞列表。一些字典中有標點符號來區分單詞。以下是我對與標點刪除有關的內容。我已經嘗試了幾種不同的解決方案,我已經在堆棧溢出中找到了有關正則表達式的問題,以及我在代碼中留下的問題。出於某種原因,他們都不會從源詞典中刪除標點符號。有人能告訴我我在這裏做錯了什麼,可能如何解決?我很茫然,有一位同事檢查了一下,他說這也應該起作用。刪除標點符號在Java中無法使用字符串替換

int i = 1; 
boolean checker = true; 
Scanner inputWords; 
PrintWriter writer = new PrintWriter(
     "/home/htarbox/Desktop/fullDictionary.txt"); 
String comparison, punctReplacer; 

ArrayList<String> compilation = new ArrayList<String>(); 



while (i <9) 
{ 
inputWords = new Scanner(new File("/home/htarbox/Desktop/"+i+".txt")); 
    while(inputWords.hasNext()) 
    { 
     punctReplacer = inputWords.next(); 
     punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", ""); 
     punctReplacer.replaceAll(",", ""); 
     punctReplacer.replaceAll("\u201C", ""); 
     punctReplacer.replaceAll("\u201D", ""); 
     punctReplacer.replaceAll("’", "'"); 

     System.out.println(punctReplacer); 
     compilation.add(punctReplacer); 
    } 
    } 
inputWords.close(); 
} 
i = 0; 
+3

字符串是不可變的。閱讀你使用的方法的javadoc。 –

+0

我知道字符串是不可變的,然而,從我理解的替換函數應該重新創建整個字符串。 –

+0

你必須這樣做:'punctReplacer = punctReplacer.replaceAll(...);',因爲函數返回一個新的字符串。 – MicSim

回答

5

punctReplacer.replaceAll(",", ""); 

返回與您更換了新的String(你會忽略)。它不會修改現有的String。因此您需要:

punctReplacer = punctReplacer.replaceAll(",", ""); 

Strings是不可變的。一旦創建你不能改變他們,任何String操作方法將返回一個新的String

+0

Gotcha。我的誤解是,我認爲這種方法的工作方式類似於數學+ =,並自動用新字符串替換該字符串,而不是我必須分配它。謝謝一堆! –

4

由於字符串是不可變的,你必須重置您的變量:

punctReplacer = punctReplacer.replaceAll("[;.:\"()!?\\t\\n]", ""); 

(順便說一句,一成不變意味着你可以不如果你想改變它,你必須重置變量)