【问题标题】:Find word in text file and count specific words在文本文件中查找单词并计算特定单词
【发布时间】:2012-10-31 03:02:03
【问题描述】:

现在我将尝试解释我需要做什么。 我有 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 或者我不知道,有人可以帮助我吗?

非常感谢。

【问题讨论】:

  • 一个Map 怎么样?键:String,值:Set
  • 我支持地图,但我会将地图作为 key=word value=拥有该词的人的集合。然后你可以只说 map.get(stilis) 并得到一个与所有有这个词的人的集合。您可能需要先将文件解析到地图中。

标签: java file search text find


【解决方案1】:

您可以拥有一个 List<String> 来保存您的单词重复的位置,并动态添加元素。

要向其中添加元素,您可以使用额外的变量 lastNameString 类型),并在您的 while 循环中执行以下操作:

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

第一行 if 用于“重置”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
}

【讨论】:

    【解决方案2】:

    我建议您使用Map&lt;String, Set&lt;String&gt;&gt;,其中key 是一个单词,value 是“输入”这个单词的人名列表。

    那么,您可以通过以下方式定义您的收藏:

    Map&lt;String, Set&lt;String&gt;&gt;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-10-13
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 2015-07-13
      • 2021-02-01
      相关资源
      最近更新 更多