【问题标题】:How can I convert CSV file into an integer array in java?java - 如何将CSV文件转换为Java中的整数数组?
【发布时间】:2019-12-13 07:00:47
【问题描述】:

我有一个包含整数的 CSV 文件:

我把它转换成一个String数组:

try (BufferedReader br = new BufferedReader(new FileReader("x.csv"))) {
        String line;
        while ((line = br.readLine()) != null) {
            String[] values = line.split("\n");
            x_values.add(Arrays.asList(values));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

输出是这样的: output

但我想将值用作整数并找到它们的平均值。我该怎么做?

【问题讨论】:

  • 这是整数的真实格式还是它们在电子表格中的显示方式?请将(正确的)示例值作为文本发布到您的问题中。
  • 首先修复您拥有的代码。使用您的调试器。在代码中使用 println 来了解您在做什么。在 "\n" 上分割一行没有多大意义。一旦你真的有一个字符串数组,将每个字符串解析为一个整数。
  • 您可以在单个字符串上使用Integer.parseInt(text),并将它们收集到int[]。总的来说,这听起来像是一个糟糕的方法。转到 OOP,创建一个专用类来逻辑地表示您每行拥有的数据。给它一个parseLine 方法,从给定的行创建它。然后简单地阅读做List<Foo> foos = Files.lines(Paths,get("file.csv")).map(Foo::parseLine).collect(Collectors.toList()); - 现代Java,万岁。

标签: java arrays csv int genetic


【解决方案1】:

您将您的行解析为String 值,而不是Integers。从您的图像来看,您的整数采用指数表示法,这意味着您必须首先将它们解析为双精度,然后将它们转换为整数:

    List<Integer> x_values = new ArrayList<>();

    try (BufferedReader br = new BufferedReader(new FileReader("x.csv"))) {
        String line;
        while ((line = br.readLine()) != null) {
            String[] values = line.split("\n");
            List<Integer> intValues = Arrays.asList(values).stream()
                    .map(Double::parseDouble) // parse x.xxE+02 to xxx.0
                    .map(Double::intValue) // xxx.0 to integer xxx
                    .collect(Collectors.toList()); // back to List
            x_values.addAll(intValues);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }

您应该确保您的 csv 文件只包含整数,否则请改用 List&lt;Double&gt; x_values 并跳过 int 转换。

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2021-09-16
    • 1970-01-01
    • 2013-05-09
    • 2017-05-21
    • 2016-10-22
    • 1970-01-01
    • 2010-12-28
    • 2012-08-24
    相关资源
    最近更新 更多