从Java中的文本文件中提取特定的列

时间:2018-12-03 13:58:46

标签: java

我需要编写一个软件,该软件从文本文件中的一列中提取整数并创建平均值。我设法从第一行中提取出一个数字,但是每当我尝试在多行中进行提取时,它都会使用第一个整数创建一个无穷循环。

这是我想出的代码:

Scanner lineScanner = new Scanner(new File("policy.txt"));
String line = lineScanner.nextLine();
List<Integer> ints = new ArrayList<>();
Matcher m = Pattern.compile("\\d").matcher(line);
while (m.find()) {
    ints.add(Integer.parseInt(m.group()));
}
System.out.println(ints.get(10));

提前谢谢

2 个答案:

答案 0 :(得分:0)

您尝试过这样的事情吗?

 Scanner lineScanner = new Scanner(new File("policy.txt"));
 List<Integer> ints = new ArrayList<>();
 Pattern pattern = Pattern.compile("\\d");
 // read lines
 while(lineScanner.hasNext()) {
     String line = lineScanner.nextLine();
     Matcher m = pattern.matcher(line);
     while (m.find()) {
         ints.add(Integer.parseInt(m.group()));
     }
 }
 lineScanner.close();
 System.out.println(ints.toString());

答案 1 :(得分:0)

所需的行为是什么?

使用column = 3和此输入:

1 2 34 5 6 7 8
1 2 5 6 7 8
1 2 45 6 7 8
1 2
1 2 56 6 7 8

此:

Pattern p = Pattern.compile("-?\\d+");
List<Integer> ints = Files.lines(Paths.get("policy.txt"))
            .map(p::matcher)
            .map(m -> m.find(column) ? Integer.parseInt(m.group()) : null)
            .collect(Collectors.toList());

System.out.println(ints);

打印:[34, 5, 45, null, 56]

这:

Pattern p = Pattern.compile("-?\\d+");
List<Integer> ints = Files.lines(Paths.get("policy.txt"))
            .map(p::matcher)
            .filter(m -> m.find(column))
            .map(Matcher::group)
            .map(Integer::parseInt)
            .collect(Collectors.toList());

System.out.println(ints);

打印:[34, 5, 45, 56]