[英]How to insert data in map from a text file in java
我有一个文件data.txt
,每行仅包含2个字符串,它们之间的间距不相等。 如何从文件中读取数据并快速插入地图。 data.txt
的格式
satisfactory 3
worth 5
wow 5
terrible 1
nice 5
good 6
awesome 8
fabulous 9
fantastic 10
如何提取每行数据并将其插入到地图Map<String,Integer>
我尝试使用StringTokenizer
但是由于string
和integer
数值之间存在可变空间,因此无法正常工作。 请帮忙
这对我有用:
public static void main(String[] args) {
String input = "satisfactory 3\n"
+ "worth 5\n"
+ "wow 5\n"
+ "terrible 1\n"
+ "nice 5\n"
+ "good 6\n"
+ "awesome 8\n"
+ "fabulous 9\n"
+ "fantastic 10";
Map<String, Integer> m = new HashMap<>();
String[] lines = input.split("\n");
for (String line : lines) {
String[] stringNumber = line.split("[ ]+");
m.put(stringNumber[0], Integer.parseInt(stringNumber[1]));
}
for (Map.Entry<String, Integer> entrySet : m.entrySet()) {
String key = entrySet.getKey();
Integer value = entrySet.getValue();
System.out.format("%s -> %s\n", key, value);
}
}
结果:
很棒-> 8
太棒了-> 10
满意-> 3
好-> 6
很棒-> 9
哇-> 5
糟透了-> 1
不错-> 5
值-> 5
好了,使用Scanner
类和正则表达式\\\\s+
有两种(以及更多:D)可能的方法。 如果至少有一个空格,则此表达式匹配任意数量的空格。
版本一,使用String#split
:
try (final Scanner scanner = new Scanner(new File("data.txt"))) {
while (scanner.hasNextLine()) {
final String line = scanner.nextLine();
final String[] parts = line.split("\\s+");
map.put(parts[0], parts[1]);
}
}
版本2,使用正则表达式作为Scanner
的定界符(请注意,如果一行包含两个以上的元素(例如"abc"
),则此版本存在问题):
try (final Scanner scanner = new Scanner(new File("data.txt"))) {
scanner.useDelimiter("\\s+");
while (scanner.hasNextLine()) {
final String key = scanner.next();
final String value = scanner.next();
map.put(key, value);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.