我有一个列表,它在同一索引中包含多个数字,除了最后一个数字外,所有数字都用逗号分隔.我希望获得所有这些数字并将它们转移到一个数组中,但我希望所有单独的数字都在这个新数组中的不同索引中.我怎样才能做到这一点呢?我找不到一个和我类似的问题,已经挣扎了一段时间.

我认为我从data.csv文件中收集数据的方式可能会被认为是不好的,我需要完全不同的方式.

我的主课是:

public static void main(String[] args) throws FileNotFoundException {
    String file = "data.csv";
    String line;
    List<String> list = new ArrayList<String>();
    int i = 0;
    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
        while((line = br.readLine()) != null){
            //System.out.println(line);
            list.add(i, line);
            i++;
        }
    } catch (Exception e){
        System.out.println(e);
    }

Data.csv文件:

20,16,23,20,2,17,9,16,0,6
20,18,16,4,10,9,4,10,16,16
3,6,19,14,14,0,5,22,4,15
19,22,6,18,9,12,15,9,25,14
20,0,1,20,6,19,20,16,15,6
13,1,6,1,4,22,3,11,1,12
10,9,20,7,21,22,3,14,1,8
25,19,21,14,15,16,25,17,6,14
0,20,10,1,3,24,24,5,10,24
2,13,0,9,18,5,21,2,24,21
17,4,16,6,22,14,15,5,10,20
6,15,10,8,10,10,16,22,15,22
2,1,3,25,15,19,0,13,7,17
24,20,6,7,3,3,12,22,23,17
12,10,10,14,2,18,21,5,21,3
13,9,20,11,8,3,23,5,5,3
4,18,4,9,1,2,24,21,23,3
3,3,2,19,6,19,1,10,5,4
13,0,12,19,24,7,10,18,18,1
0,7,10,2,22,20,21,4,3,11

预期结果:

Data[0] = 20
Data[1] = 16
Data[2] = 23
Data[10] = 20
Data[11] = 18

推荐答案

你正在阅读的那一行仍然有很多你想要单独添加到你的列表中的数字.使用split将它们拆分成一个值array.将该数组转换为具有Arrays.asList列表,然后使用addAll方法将它们全部添加到目标列表中.

String line;
List<String> list = new ArrayList<>();
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    while((line = br.readLine()) != null){
        list.addAll(Arrays.asList(line.split(",")));
    }
} catch (Exception e){
    e.printStackTrace();
}

您始终可以使用以下命令将List转换为数组

String[] values = list.toArray(String[]::new);

如果您想使用Java Streams,请创建Path,获取行,对于每一行,将split转换为值数组,转换为List,使用flatMapLists展平为值流,然后收集为List.

List<String> list = null;
try {
    list = Files.lines(Path.of(file))
        .map(line -> line.split(","))
        .map(Arrays::asList)
        .flatMap(List::stream)
        .collect(Collectors.toList());  // or .toList();  with Java 16+
} catch (Exception e){
    e.printStackTrace();
}

或者,您可以将Stream直接转换为数组,将对collecttoList的调用替换为toArray:

String[] values = Files.lines(Path.of(file))
    .map(line -> line.split(","))
    .map(Arrays::asList)
    .flatMap(List::stream)
    .toArray(String[]::new);

Java相关问答推荐

使用log 4j2格式的Hibernate 显示SQL日志(log)

如何计算内循环的时间复杂度?

JPackaged应用程序启动MSI调试,然后启动System. exit()

为什么不应用类型推断?

当涉及到泛型时,类型推理在Java中是如何工作的?

相同的Java SerializedLambda为implMethodKind返回不同的结果

Mapstruct不能正确/完全映射属性

为什么使用JDK21获取锁定锁比使用JDK11慢

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

声明带有泛型的函数以用作查找映射中的值

Java构造函数分支

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

对角线填充二维数组

在应用getCellFormula()时,Excel引用中的文件名始终为";[1]";使用Apache POI()

未调用OnBackPressedCallback-Activitiy立即终止

通过/失败的参数化junit测试方法执行数

将基于实例编号的对象列表拆分为新的对象列表

[jdk21][Foreign Function&;Memory API]MemoryLayout::varHandle通过可变数组进行 struct 化的问题

什么是;u〃;平均值;jdku;在java开发工具包中?

为什么当我输入变量而不是直接输入字符串时,我的方法不起作用?