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变量,则在更改名称后(假设每个名称的所有单词后都有一个空行)
第二行是在空行后将其设置回新名称。

此外,当您增加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>>where 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 回答