0

多くの単語を含む 1 つの非常に長い文字列から単語を文字列として抽出しようとしています。この大きな文字列の塊を取得し、for ループで移動し、文字列を作成しながらハッシュセットに追加し、処理中の単語数を追跡しようとしています。すべてをビルドし、Eclipse が明らかなエラーを示さなかったとき、私は自分自身をとても誇りに思っていました。テストに行ったとき、0 のカウンター、0 の hashset.size、および空のハッシュセットがありました :(

これが私がいじっているコードです:

    public int countUniqueWords(String line) {
    hashset = new HashSet<String>();
    word = new StringBuilder();
    int endOfLine = line.length() - 1;
    boolean isWord = false;
    String stringWord = null;
    Integer counter = 0;

    for (int i = 0; i < line.length(); i++) {
        if (Character.isLetter(line.charAt(i)) == true && i != endOfLine) {
            word.append(line.charAt(i));
        } else if (Character.isLetter(line.charAt(i)) == false && isWord == true) {
            counter++;
            stringWord = word.toString();
            hashset.add(stringWord);
            word = null;
            isWord = false;
        } else if (Character.isLetter(line.charAt(i)) && i == endOfLine) {
            counter++;
            stringWord = word.toString();
            hashset.add(stringWord);
        }
    }
    System.out.println(counter);
    System.out.println(hashset.size());
    System.out.println(hashset);
    return counter;
}

タイヤを探して蹴り続けます。それまでの間、何か提案があれば、ここにある私の小さなホーム オフィスで精神的に良い雰囲気をたくさん与えてあげましょう。ここで、少なくとも 1 つまたは 2 つの非常に根本的なエラーがあるようです。明らかに、想定されているようにループを反復処理していないためです。StringBuilder を HashSets および Character クラスと一緒に使用し、これらのいずれも特によく理解していないにもかかわらず、すべてマッシュアップしたことが関係していると思われます。はい、私はオラクルのドキュメントに注いだ。

4

2 に答える 2

1

最初の条件はすべての文字に当てはまります

   if (Character.isLetter(line.charAt(i)) == true && i != endOfLine)

isWord が false であるため、2 番目の条件は常に false であり、条件の下のステートメントは実行されません。

   else if (Character.isLetter(line.charAt(i)) == false && isWord == true) 

これは最初の条件と同じであるため、3 番目の条件は実行されません。

    else if (Character.isLetter(line.charAt(i)) && i == endOfLine)

必要に応じて「isWord」フラグをオン/オフして、条件を変更する必要があります。

于 2012-10-29T09:28:43.250 に答える
0

このアプローチを試してください......

-fromをそのメソッドと一緒に使用BreakIteratorて、文中のすべての単語を取得します。java.text.BreakIteratorstatic getWordInstance()

-これは自動的に単語かどうかを処理します...

-次に、それをに追加するだけですHashSet<String>

これらのリンクを参照してください。

http://javabeanz.wordpress.com/2009/02/21/working-with-text-in-java-using-breakiterator-api/

http://download.java.net/jdk7/archive/b123/docs/api/java/text/BreakIterator.html

http://www.javadocexamples.com/java/text/BreakIterator/getWordInstance%28Locale%20where%29.html

于 2012-10-29T07:21:17.000 に答える