Java BufferedReader返回列而不是行

Java BufferedReader返回列而不是行,java,bufferedreader,Java,Bufferedreader,当我这么做的时候 请尝试BufferedReader BufferedReader=new BufferedReadernew FileReaderfilename{ 弦线; 而line=bufferedReader.readLine!=null{ String[]data=line.split,; } }捕捉异常{ e、 打印跟踪; } 如果我打印数据[0],我会得到第一列而不是第一行。在执行数据[0]时,如何修改它以返回行 当我这么做的时候 List<String> data;

当我这么做的时候

请尝试BufferedReader BufferedReader=new BufferedReadernew FileReaderfilename{ 弦线; 而line=bufferedReader.readLine!=null{ String[]data=line.split,; } }捕捉异常{ e、 打印跟踪; } 如果我打印数据[0],我会得到第一列而不是第一行。在执行数据[0]时,如何修改它以返回行

当我这么做的时候

List<String> data;

try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) {
    data = bufferedReader.lines().collect(Collectors.toList());
} catch (IOException e) {
    e.printStackTrace();
}
如果执行data.get0,我会按预期获得行,那么为什么不使用第一个方法呢

while ((line = bufferedReader.readLine()) != null) {
  String[] data = line.split(",");
}
在这里,您将获取一行,将其拆分为多个部分,并分配给数据变量。此时处理的是单行,无法引用第x行,因为您只有一行。这个变量是在while循环中定义的,所以它的状态只能在一个给定的迭代中访问

在这里,您将获取一行,将其拆分为多个部分,并分配给数据变量。此时处理的是单行,无法引用第x行,因为您只有一行。该变量是在while循环中定义的,因此它的状态只能在一次给定的迭代中访问。

在CSV文件中,每行都是一行。拆分行就是生成列的原因。因此,如果需要行,不需要拆分行,只需按原样打印即可。例如,要只打印第一行,您需要做的就是

try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) {
    String firstRow = bufferedReader.readLine();
    System.out.println(firstRow);
} catch (IOException e) {
    e.printStackTrace();
}
在CSV文件中,每行都是一行。拆分行就是生成列的原因。因此,如果需要行,不需要拆分行,只需按原样打印即可。例如,要只打印第一行,您需要做的就是

try (BufferedReader bufferedReader = new BufferedReader(new FileReader(filename))) {
    String firstRow = bufferedReader.readLine();
    System.out.println(firstRow);
} catch (IOException e) {
    e.printStackTrace();
}

在第一个示例中,您使用bufferedReader.readLine读取每一行,它已经为您提供了一行。然后在char处拆分行,这将为当前行提供列

您的秒示例使用bufferedReader.lines返回一个行流,您可以使用.collectCollectors.toList收集这些行。列表中的每一行仍然只有一个包含所有逗号的字符串。因此,您可能需要一个二维数组或列表

您可以通过以下方式实现这一点:

try BufferedReader br=new BufferedReadernew FileReaderfilename{ 最终列表表=br行 .maprow->Stream.ofrow.split, .托利斯特 .toList; System.out.printlntable.get0; }捕捉异常{ e、 打印跟踪; }
在第一个示例中,您使用bufferedReader.readLine读取每一行,它已经为您提供了一行。然后在char处拆分行,这将为当前行提供列

您的秒示例使用bufferedReader.lines返回一个行流,您可以使用.collectCollectors.toList收集这些行。列表中的每一行仍然只有一个包含所有逗号的字符串。因此,您可能需要一个二维数组或列表

您可以通过以下方式实现这一点:

try BufferedReader br=new BufferedReadernew FileReaderfilename{ 最终列表表=br行 .maprow->Stream.ofrow.split, .托利斯特 .toList; System.out.printlntable.get0; }捕捉异常{ e、 打印跟踪; }
你认为呢,威尔·斯普利特,你认为呢?所以我假设,在每一行中,你有一行?一行就是一行。您的变量名已经反映了您所拥有的内容。然后,告诉它在逗号处拆分行,并获取结果的第一个元素。然后,你会惊讶于这是一个“专栏”。当你不想这样做的时候,你为什么要分割这条线?你认为呢,will line.split,do?所以我假设,在每一行中,你都有一行?一行就是一行。您的变量名已经反映了您所拥有的内容。然后,告诉它在逗号处拆分行,并获取结果的第一个元素。然后,你会惊讶于这是一个“专栏”。为什么在不需要的时候分割行?第二个代码段返回一个行列表,有什么问题?对数组执行同样的操作是不切实际的,因为在开始读取数据之前,您需要知道有多少行。您的第二个代码段返回一个行列表,有什么问题?对数组执行同样的操作是不切实际的,因为在开始读取数据之前,您需要知道有多少行。@levivah940您应该开始决定实际需要什么。然后,在问题中写下你的实际目标。您已经显示了获取所有行列表的代码。如果需要数组,请将其更改为bufferedReader.lines.toArrayString[]::new。这仍然会提供完整的行,但其中包含分隔符。如果这是他想要的,没关系,但他更愿意将行拆分并将其转换为列列表或列数组。@levivah940您应该开始决定您真正想要的内容。然后,在问题中写下你的实际目标。你有alr吗
已显示代码以获取所有行的列表。如果需要数组,请将其更改为bufferedReader.lines.toArrayString[]::new。这仍然会提供完整的行,但其中包含分隔符。如果这是他想要的,没关系,但是他更愿意分割行,并将其转换为列列表或列数组。