質問
文字列内に Word の出現箇所を書き込むのに行き詰まっています。私は(タスクノートで)compareToIgnoreCase を使用するためのヒントを入手しました。それで私は次のようなことを試しました:
splitwords = StringCont.split("\\s");
for(int i=0; i<splitwords.length; i++)
{
if(splitwords[1].compareToIgnoreCase(splitwords[i]) == 0)
splitcount++;
}
もちろん、それは私にできることだけであり、おそらく悪い方法です。コードを実行すると、配列例外が発生することもあれば、実行されることもあります。足りないものは次のとおりです。すべての単語を調べてチェックし、すでにカウントされている単語をスキップします。コーディング方法を理解して進められるよう、喜んでサポートさせていただきます。ありがとう :)
編集:問題を十分に明確に説明していないようですが、必要なものを簡単にまとめたマップオブジェクトについての素晴らしい答えが得られました。地図のことは知りませんでした。はい、私は文字列内で特定の単語が何回見つかるかを調べようとしていました。
タンゲン:最初の単語 (最初の空白が存在する) splitwords[1] を取得し、それを文字列 splitwords[i] 内の他のすべての単語と比較し、それが 0 (等しい) の場合は count++ する必要があります。
エスコ:確かに文のような空白があります。しかし、私はまだこの例外を受けています。なぜスルーなのかわかりません。
解決
String[] words = string.toLowerCase().split("\\s+");
Map<String, Integer> wordCounts = new HashMap<String, Integer>();
for (String word : words) {
Integer count = wordCounts.get(word);
if (count == null) {
count = 0;
}
wordCounts.put(word, count + 1);
}
あなたはケース非感受性を持つようにしたいようだと私はtoLowerCase()
前split()
と呼ばれることに注意します。
他のヒント
あなたは文章中のの特定のの単語や文章内のすべての単語の累積単語数の発生をお探しですか?あなたのサンプルコードに基づいて、私はかつてのを期待したいが、あなたの説明は私には後者の考えになります。
は、いずれの場合においても、明らかなものは: - 元の文字列自体入力文字列内の任意の空白がない場合、String#split()
は、1つの要素を含む配列を返します。配列のインデックスはゼロから始まるので、利用可能な唯一の文字列がインデックスsplitwords[1]
であるため、そのArrayIndexOutOfBoundsException
は[0]
の原因となっている。
Set を使用して各単語を格納し、最後にセットのサイズを取得できます。
を取得します。 異なる単語の数 ではない 単語の数 もちろん。
、あなたはHashMap<String, Integer>
を使用する必要があります。そこには、見つかった各単語のカウンターを保存することができます。