【发布时间】:2014-06-06 15:15:07
【问题描述】:
所以,我要做的是从 8 个单独的字典单词列表中编译一个没有重复的单词列表。有些词典中有标点符号来分隔单词。以下是我所拥有的与标点符号删除有关的内容。我已经尝试了几种不同的解决方案,这些解决方案是关于正则表达式的堆栈溢出,以及我在代码中保留的解决方案。出于某种原因,他们都没有从源字典中删除标点符号。有人能告诉我我在这里做错了什么以及如何解决吗?我不知所措,让同事检查了一下,他说这应该也可以。
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;
【问题讨论】:
-
字符串是不可变的。阅读您使用的方法的 javadoc。
-
我知道字符串是不可变的,但是根据我的理解,替换函数应该重新创建整个字符串。
-
你必须这样做:
punctReplacer = punctReplacer.replaceAll(...);,因为函数返回一个新字符串。 -
你认为重新创建字符串意味着什么?你认为不可变意味着什么?阅读 javadoc。
-
感谢 MicSim!成功了。
标签: java string arraylist replaceall