我正在从如下所示的文本文件中读取值:
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();