1

単語が TXT ファイルに出現する回数を数えようとすると問題が発生します。

  1. テキストフィールド ( txta )を作成します
  2. アクションを適用するボタンを作成します ( btn )
  3. ファイルの内容が表示されるテキストエリア(エリア)を作成します

ファイルを選択すると、ファイルの内容がエリアに表示されます。次に、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-lang にStringUtils.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" を検索すると、次のように返されます: Satur days、 Sun daysdaysに一致するため、 3 が返されます。だけを一致させたいと思います

その場合、正規表現を使用する必要があります。答えは次のとおりです。

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 に答える