2014-06-06 91 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]", ""); 

(顺便说一句,一成不变意味着你可以不如果你想改变它,你必须重置变量)