Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
我正在对Java文本文件中的内容运行过滤器。我已经删除了所有标点符号。现在,我需要删除某些常用词。
我正在测试字符串“我有一个梦想”。我的常用单词列表将过滤我们的“我”,“有”和“一个”,仅给我留下“梦”。我当前的代码使我使用“ drem”过滤掉“ a”中的“ a”以及“ dream”中的“ a”。
我不确定如何解决这个问题。这是我当前的代码。
sw是一个具有布尔函数(包含)的对象,该函数告诉我应该过滤掉的单词列表中是否存在“单词”。
问题:如何过滤掉“ a”一词而不过滤掉“ dreams”之类的其他词,例如“ dream”?我认为从解释中很容易得出这个问题,但我想不是。希望这足够明确,不会被关闭
其中
PS:还添加了
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
6年前关闭。
我正在对Java文本文件中的内容运行过滤器。我已经删除了所有标点符号。现在,我需要删除某些常用词。
我正在测试字符串“我有一个梦想”。我的常用单词列表将过滤我们的“我”,“有”和“一个”,仅给我留下“梦”。我当前的代码使我使用“ drem”过滤掉“ a”中的“ a”以及“ dream”中的“ a”。
我不确定如何解决这个问题。这是我当前的代码。
public String removeStop (String file)
{
Scanner scan = new Scanner(file);
String word;
while(scan.hasNext()){
word = scan.next();
if(sw.contains(word)){
file=file.replaceAll(word, "") ;
}
}
return file;
}
sw是一个具有布尔函数(包含)的对象,该函数告诉我应该过滤掉的单词列表中是否存在“单词”。
问题:如何过滤掉“ a”一词而不过滤掉“ dreams”之类的其他词,例如“ dream”?我认为从解释中很容易得出这个问题,但我想不是。希望这足够明确,不会被关闭
最佳答案
调用replaceAll
的方式仍然会在原始字符串中留下很多空格或其他标点符号。我建议使用此:
file = file.replaceAll("\\b" + Pattern.quote(word) + "(\\W+|$)", "") ;
其中
\W
代表任何非单词字符,而\\b
是单词边界。PS:还添加了
Pattern.quote
以转义特殊的正则表达式符号(如果word
中存在的话)。08-05 12:35