【问题标题】:how do i save numbers in a csv file into a java arraylist如何将 csv 文件中的数字保存到 java 数组列表中
【发布时间】:2012-10-28 14:14:07
【问题描述】:

你好,这是我第一次发帖,如果我在提问过程中做错了什么,请告诉我。

我的目的:将双变量保存在 csv 文件中,并将它们保存在 java 文件中的数组列表中。

我目前有当前代码,我是java初学者,所以请不要喷ToT

import java.io.*;
import java.util.*;
import java.lang.*;

public class CsvProcessor {

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);

        // ask for file path at command prompt, save the path input in path
        System.out.print("path of file: ");
        String path = keyboard.next();

        try {
            // set up file, reader, and arraylist for processing csv file
            java.io.File csv = new java.io.File(path);
            BufferedReader bufferedReader = new BufferedReader(new FileReader(csv));
            ArrayList<String> csvEntry = new ArrayList<String>();

            // set parameters for StringTokenizer
            String line = "";
            String delimiter = ",";

            //read using bufferedReader and save using csvEntry ArrayList
            while ((line = bufferedReader.readLine()) != null) {    
                StringTokenizer stringTokenizer = new StringTokenizer(line, delimiter);
                while (stringTokenizer.hasMoreTokens()) {
                    csvEntry.add(stringTokenizer.nextToken());
                }
            }

            csvEntry.toArray();
            double[] csvDouble = new double[csvEntry.getLength()];
            for (int i = 0; i < csvEntry.getLength(); i++) {
                csvDouble[i] = Double.parseDouble(csvEntry[i]);
            }

            int x = csvDouble.getLength();
            double sum = 0;

            for (int y = 0; y < x; y++) {
                sum = sum + csvDouble[y];
            }

            double mean = sum / x;
            System.out.println("mean is: " + mean);
            bufferedReader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

我尝试了一些方法,比如转换 csv 文件中的字符串并将它们保存到 arraylist 中,然后将 arraylist 转换为数组,然后再将其转换为 double 数组。 我得到的错误是:

C:\Users\user\Codes\ktrt>java CsvProcessor
path of file: C:\Users\user\Codes\ktrt\montyreal.csv
Exception in thread "main" java.lang.NumberFormatException: For input string: "5
48.53"
        at java.lang.NumberFormatException.forInputString(Unknown Source)
        at java.lang.Integer.parseInt(Unknown Source)
        at java.lang.Integer.<init>(Unknown Source)
        at CsvProcessor.main(csvprocessor.java:27)

非常感谢您的帮助。

【问题讨论】:

标签: java csv arraylist


【解决方案1】:

首先,你有一个错误的错误日志。您的代码没有 Integer.parseInt() 方法。假设您正确地将 CSV 解析为 csvEntry 变量,您可以这样做:

List<Double> csvDouble = new ArrayList<Double>();
double mean, total = 0;

for (String raw : csvEntry) {
  double entry = Double.valueOf(raw);
  total += entry;
  csvDouble.add(entry);
}

mean = total / csvDouble.size();
// at this point you have your ArrayList and mean value;
System.out.println("mean is " + mean);

希望这会有所帮助:)

【讨论】:

  • 错误代码错误是什么意思?我有 double.parsedouble(csventry[i]) 将保存在 csventry 中的字符串转换为双变量,然后我尝试将它们存储到 csvdouble 中,这是一个双精度数组列表。
  • 您的代码中没有Integer.parseInt()(在您的日志中说明)。你有Double.parseDouble()
猜你喜欢
  • 2021-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-06
  • 2021-07-04
  • 1970-01-01
  • 2014-05-04
相关资源
最近更新 更多