我需要编写一个软件,该软件从文本文件中的一列中提取整数并创建平均值。我设法从第一行中提取出一个数字,但是每当我尝试在多行中进行提取时,它都会使用第一个整数创建一个无穷循环。
这是我想出的代码:
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));
提前谢谢
答案 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]