我有一个文本文件,每行代表一个时区。 timezone.txt
我希望我的程序逐行进行并计算整个文件中的时区数量。
示例:
Eastern
Eastern
West
Eastern
West
West
Eastern
Mountain
West
然后给我一个包含时区和出现次数的列表
[(West, 4), (Eastern, 4), (Mountain, 1)]
程序启动时,不同时区的数量未知。到目前为止,我的代码只能打印每个时区,但不知道如何在java中创建这个数组。
public static void main(String[] args) {
try {
BufferedReader in = new BufferedReader( new FileReader("timezones.txt"));
String line = null;
while ( (line = in.readLine() ) != null) {
System.out.println(line);
}
} catch (IOException e){
e.printStackTrace();
}
}
答案 0 :(得分:3)
创建Map<String, Integer>
以存储与每个时区相关联的计数。当您读取时区名称时,检索以该名称存储的Integer
(如果有),递增它,并将更新后的计数存储回地图中。如果地图中没有出现该名称,请将计数存储为1.完成后,您可以检索所有<String, Integer>
条目并打印列表。
答案 1 :(得分:1)
您应该使用Map<String, Integer>
之类的地图,其中密钥为String
,值为Integer
。然后循环浏览文件并将String
放入Map
并计算值。
while ( (line = in.readLine() ) != null) {
Integer count= map.get(line);
map.put(line, count == null ? 1 : count+1);
}
答案 2 :(得分:1)
使用lambdas:
try (BufferedReader in = new BufferedReader(new FileReader("timezones.txt"))) {
Map<String, Integer> map = new HashMap<>();
in.lines().forEach(line -> {
Integer count = map.get(line);
map.put(line, count == null ? 1 : count + 1);
});
System.out.println(map);
} catch (IOException e) {
e.printStackTrace();
}
或用于:
Map<String, Integer> map = new HashMap<>();
for (String line; null != (line = in.readLine()); ) {
Integer count = map.get(line);
map.put(line, count == null ? 1 : count + 1);
}
System.out.println(map);