如何在java中的文本文件中插入数据

时间:2015-01-15 20:31:15

标签: 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值之间存在可变空间,因此效果不佳。请帮忙

2 个答案:

答案 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);
    }
}