一个单词出现在TXT文件中的次数

时间:2012-06-30 21:10:25

标签: java string

当我尝试计算一个单词出现在TXT文件中的次数时,我遇到了问题。

  1. 我创建了一个文本字段( txta
  2. 我创建了一个按钮来应用操作( btn
  3. 我创建了一个textarea(区域),其中显示了文件的内容。
  4. 当我选择文件时,文件的内容会显示在区域中。然后我输入 txta 中的单词进行搜索。然后我点击 btn ,但代码不起作用。

    public int contarPalabras(String chain, String word) {
        // English translation: 
        // Receive a string and a word and return the amount of times 
        // that the word was found in the string.
        // If the letter is not found, return (-1).
    
        int cant = 0; 
    
        int intIndex = chain.indexOf(word);
    
        if (intIndex == -1) {
            cant = -1;
        } else {
            cant = intIndex;
        }
    
        return cant;
    }
    

3 个答案:

答案 0 :(得分:4)

commons-lang有StringUtils.countMatches(str, sub),它完全符合您的要求。

答案 1 :(得分:3)

阅读String.indexOf(string)的文档。它没有做你认为它做的事情。它仅返回参数的第一次出现的索引

为了让它发挥作用你可以做这样的事情:

public int countWord(String chain, String word){
    if("".equal(word)){
        throw new IllegalArgumentException("word is empty string"); // error when word is empty string
    }
    index = 0;
    count = 0;
    while (index != -1){
        int found = chain.indexOf(word, index);
        if(found != -1){
            count++;
            index = found + word.length();
        }
    }
    return count;
}

修改

如果你真的只想计算完整的单词(即从两边用空格分隔的子串),这个版本会更有用:

public int countWord(String chain, String word){
    if("".equal(word)){
        throw new IllegalArgumentException("word is empty string"); // error when word is empty string
    }
    index = 0;
    count = 0;
    word = " " + word + " ";
    while (index != -1){
        int found = chain.indexOf(word, index);
        if(found != -1){
            count++;
            index = found + word.length() - 1;
        }
    }
    return count;
}

答案 2 :(得分:0)

我认为给出的2个答案会产生以下问题: 在文中:“周六和周日是我最喜欢的日子”,如果你搜索“天”,它将返回:3因为它将匹配Satur ,Sun 和的即可。 我假设您只想匹配

在这种情况下你必须使用正则表达式,这是答案:

public int countWord(String chain, String word){
  Pattern p = Pattern.compile("\\b" + word + "\\b");
  Matcher m = p.matcher(chain);

  int count = 0;
  while(m.find()) {
    count++;             
  }

  return count;
}