我有一个文件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
值之间存在可变空间,因此效果不佳。请帮忙
答案 0 :(得分:1)
这对我有用:
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);
}
}
结果:
棒极了 - &gt; 8
太棒了 - &gt; 10个
满意 - &gt; 3
好 - &gt; 6
神话般的 - &gt; 9
哇 - &gt; 5
太可怕了 - &gt; 1
很好 - &gt; 5
值得 - &gt; 5个
答案 1 :(得分:1)
嗯,通过使用Scanner
类和正则表达式\\s+
,有两种(以及更多:D)可能的方法。 This expression matches任意数量的空白区域(如果至少有一个)。
第一版,使用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]);
}
}
第二版,使用正则表达式作为Scanner
中的分隔符(请注意,如果一行包含两个以上的元素,例如"a b c"
),则此版本存在问题:
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);
}
}