java - Java中如何查找某个单词在哪一行

标签 java hashmap bufferedreader filereader

我正在尝试创建一个程序来计算单词在文本中出现的次数,并告诉您它在每行中出现的次数。我设法找到了该单词在文本中出现的次数和行数,但我无法找到该单词出现在哪一行以及出现了多少次。请你帮助我好吗?这是我到目前为止的代码:

    FileReader file = new FileReader("C:/Users/User/Desktop/test.txt");
    BufferedReader buffer = new BufferedReader(file);

    String line = buffer.readLine();
    Map<String, Integer> hash = new HashMap<String, Integer>();
    int counter = 0; //number of lines

    while (line != null){
        String[] words = line.split(" ");

        for (String s : words) {
            Integer i = hash.get(s);
            hash.put(s, (i==null)? 1: i+1);
        }

        line = buffer.readLine();
        counter = counter + 1;           
    }

System.out.println(hash);
System.out.println(counter);

最佳答案

它是每行的附加信息。您只需要每行的 count 信息,因此简单的 Map 是不够的,您需要每行的 Map of Map。

有两种基本方法:

    Map<Integer, Map<String, Integer>> hashOfHash = new HashMap<>();
    List<Map<String, Integer>> list = new ArrayList<>();

第一行根据整数键值创建您的 map 的 map - 这将是该行。

第二行是创建 map 列表,因为列表中的顺序已存储,您现在只需迭代即可知道哪一行是哪一行。

我推荐第二行。

您还需要稍微修改一下 while 循环,以便能够为每一行创建新的映射(考虑一下您需要执行与第一行相同的操作)。

<小时/>

例如,这应该与您的程序执行相同的操作,但它将显示每行的结果:

public static void main(String[] args) throws FileNotFoundException, IOException {
    FileReader file = new FileReader("C:/Users/User/Desktop/test.txt");
    BufferedReader buffer = new BufferedReader(file);

    String line = buffer.readLine();

    List<Map<String, Integer>> list = new ArrayList<>();

    while (line != null) {
        Map<String, Integer> hash = new HashMap<String, Integer>();
        String[] words = line.split(" ");

        for (String s : words) {
            Integer i = hash.get(s);
            hash.put(s, (i == null) ? 1 : i + 1);
        }

        line = buffer.readLine();
        list.add(hash);
    }

    int i=0;
    for (Map<String, Integer> mapAtRow : list) {
        i++;
        System.out.println("at row " + i + "we found this: " + mapAtRow);
    }
}

关于java - Java中如何查找某个单词在哪一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28954034/

相关文章:

java - 使用 Spring 和 Apache CXF 实现 Java Web 服务的安全性

java - 关于java中从 double 到整数的自动舍入结果?

java - tearDown() 应该在每次测试后运行吗?

java - 使用 HashMap 而不是数组是否有空间开销?

java - Android - 将 Map<String, Object[]> 保存到文件

java - BufferReader.skip()性能

java - 使用 bufferedread 和 hashset 检查文件中的行

java - 加载文件,netbeans的默认位置

c++ - 使用哈希表构建符号表

java - 使用 BufferedReader 每 10 行读取一次