0

今、私は私が何をする必要があるかを説明しようとします。file.txtファイルがあります。次のようになります。

John //first line - name
One
Three
Four

Peter //first line - name
Two
Three

Elisa //first line - name
One
Three

Albert //first line - name
One
Three
Four

Nicole //first line - name
Two
Four

だから私はプログラムのコードを持っています:

 public class Testing {


        public static void main(String args[]) throws Exception {
            Scanner input = new Scanner(System.in);
            System.out.println("Select word from list:");
            System.out.println();

            try {
                FileReader fr = new FileReader("src/lt/kvk/i3_2/test/List.txt"); // this is list of words, everything all right here
                BufferedReader br = new BufferedReader(fr);
                String s;
                while((s = br.readLine()) != null) {
                    System.out.println(s);
                }
                fr.close();
                String stilius = input.nextLine();   // eneter word which I want to count in File.txt
                BufferedReader bf = new BufferedReader(new FileReader("src/lt/kvk/i3_2/test/File.txt")); // from this file I need to count word which I entered before

                int counter = 0;                
                String line;

                System.out.println("Looking for information");
                while (( line = bf.readLine()) != null){
                    int indexfound = line.indexOf(stilius);
                    if (indexfound > -1) {
                         counter++;
                    }

                }
                if (counter > 0) {
                    System.out.println("Word are repeated "+ counter + "times");}
                    else {
                    System.out.println("Error...");
                }
                bf.close(); 

            }
            catch (IOException e) {
                System.out.println("Error:" + e.toString());
                }
            }
        }

file.txt内の特定の単語(キーボードで入力)をカウントするこのプログラム。

私はこのプログラムを作成する必要があります:例:単語を入力した場合:次のようにOne表示する必要があります:

Word One repeated 3 times by John, Elisa, Albert

この言葉が誰によって繰り返されたかによって私が選ぶ必要があるすべてのもの。しかし、私はそれを作る方法を本当に知りません、多分LinkedListまたは私は知りません、誰かが私を助けることができますか?

どうもありがとうございます。

4

2 に答える 2

0

あなたはList<String>あなたの言葉が繰り返された場所を保持し、その場でそれに要素を追加することができます。

要素を追加するには、lastName(タイプのString)追加の変数を使用し、whileループで次のようにします。

if (line.trim().length() == 0) lastName = null; 
else if (lastName == null) lastName = line;

変数を「リセット」する場合の最初の行lastNameは、名前の名前を変更した後(各名前のすべての単語の後に空の行があると想定)
、2番目の行は空の行の後に新しい名前に戻します。

さらに、増やすときは次のことをcounter行います。

myList.add(lastName)

したがって、ループは次のようになります。

List<String> resultList = new ArrayList<String>();
String lastName = null;
while (( line = bf.readLine()) != null){
   if (line.trim().length() == 0) lastName = null;
   else if (lastName == null) lastName = line;
   int indexfound = line.indexOf(stilius);
   if (indexfound > -1) {
      counter++;
      resultList.add(lastName);
   }
//do something with resultList, which contains the names
}
于 2012-11-11T12:19:52.353 に答える
0

Map<String, Set<String>>keyが単語で、valueがこの単語を「入力した」人の名前のリストである場合に使用することをお勧めします。

したがって、コレクションを定義する方法は次のとおりです。

Map<String, Set<String>>word2people = HashMap>(); `

そこに単語を追加する方法は次のとおりです。

String name = ...
String word = ...
Set<String> people = word2people.get(word);
if (people == null) {
    people = new HashSet<String>();
    word2people.put(people);
}
people.add(name);

そして、値を取得する方法は次のとおりです。

word2people.get(word)

于 2012-11-11T12:25:59.397 に答える