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

在Java中从文本文件中提取特定列,java,Java,我需要编写一个软件,从文本文件中的一列中提取整数,并创建一个平均值。我已经设法从第一行中提取第一个数字,但每当我尝试在多行中提取时,它就会创建一个带有第一个整数的无止境循环 下面是我想出的代码: Scanner lineScanner = new Scanner(new File("policy.txt")); String line = lineScanner.nextLine(); List<Integer> ints = new ArrayList<>(); Mat

我需要编写一个软件,从文本文件中的一列中提取整数,并创建一个平均值。我已经设法从第一行中提取第一个数字,但每当我尝试在多行中提取时,它就会创建一个带有第一个整数的无止境循环

下面是我想出的代码:

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));
Scanner lineScanner=新的扫描仪(新文件(“policy.txt”);
String line=lineScanner.nextLine();
List ints=new ArrayList();
匹配器m=模式。编译(\\d”)。匹配器(行);
while(m.find()){
add(Integer.parseInt(m.group());
}
System.out.println(ints.get(10));

提前谢谢你

你试过这样的东西吗

 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());
Scanner lineScanner=新的扫描仪(新文件(“policy.txt”);
List ints=new ArrayList();
Pattern=Pattern.compile(\\d”);
//读台词
while(lineScanner.hasNext()){
String line=lineScanner.nextLine();
匹配器m=模式匹配器(线);
while(m.find()){
add(Integer.parseInt(m.group());
}
}
lineScanner.close();
System.out.println(ints.toString());

期望的行为是什么

使用
列=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
这:


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

您如何尝试对多行进行打印?因为这段代码只运行1行,“特定列”部分在哪里?这是一行的所有数字。请阅读“如何创建一个”。然后使用链接改进您的问题(不要通过评论添加更多信息)。否则,我们将无法回答您的问题并帮助您。@SvenHakvoort我知道确实如此。这是实际工作的代码,但它只适用于一行,我必须从中的每一行获得相同位置的整数file@Tom它读取行中的所有数字,但只显示我想要的数字。我需要的所有数字都在同一行的同一位置。只需编译一次模式,就可以提高性能。现在编写,您正在为文件中的每一行进行编译。
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);
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);