Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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