删除标点符号在Java中不能使用字符串替换

时间:2014-06-06 15:15:08

标签: java string arraylist replaceall

所以,我试图做的是编译单个单词列表,而不是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;

2 个答案:

答案 0 :(得分:5)

该行

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

返回一个新的String与你的替代品(你忽略了)。它修改现有的String。因此,您需要:

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

Strings是不可变的。创建后,您无法更改它们,任何String操作方法都会返回一个新的String

答案 1 :(得分:4)

由于字符串是不可变的,您必须重置变量:

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

(顺便说一下,不可变意味着一旦设置了你就不能改变它,所以使用String你总是要重置变量,如果你想改变它)