繁体   English   中英

如何从Java中的文本文件在地图中插入数据

[英]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但是由于stringinteger数值之间存在可变空间,因此无法正常工作。 请帮忙

这对我有用:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM