读取3位字符串到ArrayList?



我正在从如下所示的文本文件中读取值:

000,050,007
059,000,157
002,038,000

我在下面的代码块中得到一行:

while ((line = reader.readLine()) != null) {
System.out.println(line); // 000,050,007
List<Integer> list = List.of(Integer.parseInt(line))
}

但是,我不能将3位数值(字符串)强制转换为Integer。那么,我怎样才能优雅地做到这一点呢?

更新:我使用以下方法,但我不确定是否有比使用map()2次更好的方法?

List<Integer> items= Stream.of(line.split(","))
.map(String::trim)
.map(Integer::parseInt)
.toList();

Scanner也是可能的:

import java.util.List;
import java.util.Scanner;
import java.nio.file.Files;
import java.nio.file.Path;
public class NScan {
public static void main(String[] args) {
try (Scanner s = new Scanner(Files.newBufferedReader(Path.of(args[0]))).useDelimiter("[rn,]")) {
List<Integer> ints = s.tokens().
map(String::trim).
map(Integer::valueOf).
toList();
System.out.println(ints);
} catch (Throwable t) {
t.printStackTrace();
}
}
}

在转换为整数列表之前,需要用逗号分隔行

List<List<Integer>> list = new ArrayList<>();
while ((line = reader.readLine()) != null) {
System.out.println(line); // 000,050,007
List<Integer> integers = Arrays.stream(line.split(","))
.map(s -> Integer.parseInt(s.trim()))
.toList();
list.add(integers);
}

注意,有多个map调用并不影响性能,你只需要根据可读性来决定。

当您使用BufferedReader时,您可以将while循环替换为流

List<List<Integer>> list = reader.lines().map(line ->
Arrays.stream(line.split(","))
.map(s -> Integer.parseInt(s.trim()))
.toList()
).toList();

最新更新