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