1

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

  1. 我创建了一个文本字段(txta
  2. 我创建了一个按钮来应用操作(btn
  3. 我创建了一个显示文件内容的textarea ( area )

当我选择文件时,文件的内容显示在area中。然后我输入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;
}
4

3 回答 3

4

commons-langStringUtils.countMatches(str, sub)完全符合您的要求。

于 2012-06-30T21:13:30.017 回答
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;
}
于 2012-06-30T21:31:44.963 回答
0

我认为给出的 2 个答案会有以下问题:在文本中:“Saturdays and Sundays are my favorite days”如果你搜索“days”,它将返回:3 因为它将匹配 Satur days、 Sun daysdays。我假设您只想匹配几天

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

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;
}
于 2012-06-30T21:51:05.060 回答