我尝试使用以下代码对文本文件进行标记:
String fileContent = "";
String fileContentTokens[];
try{
fileContent = new Scanner(new File(fname)).useDelimiter("\\Z").next();
} catch(Exception ex) {
System.out.println(ex.getMessage());
}
fileContent = fileContent.replaceAll("\\s*([,.?!\"'()-:*;])\\s*", " $1 ");
//System.out.println(fileContent);
fileContentTokens = fileContent.split(" ");
问题是令牌没有正确形成,我的意思是有些词仍附有引用,有些仍然有撇号。上面的代码应该在每个标点符号之间留下空白,因此它不会附加到它自己的单词上。例如:“那很酷”应该是“那很酷”。但出于某种原因,它并没有这样做。它只是为了一些词而不是全部这样做。
答案 0 :(得分:0)
来自Java API:请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;如果需要,请 Matcher.replaceAll
。使用 Matcher.quoteReplacement(java.lang.String)
来取消这些字符的特殊含义
答案 1 :(得分:0)
你的字符串中有另一种类型的撇号失败。
Karachi’s Manghopir area , DawnNews reported on Saturday . The
在该字符串中,您有’
但是在你的正则表达式中,你有'
那些是不同的。将前撇号也添加到正则表达式中,它将起作用:
fileContent = fileContent.replaceAll("\\s*([,.?!\"'’()-:*;])\\s*", " $1 ");