如何将csv文件中的数字保存到java arraylist中

如何将csv文件中的数字保存到java arraylist中,java,csv,arraylist,Java,Csv,Arraylist,您好,这是我第一次发帖,如果我在提问过程中有任何错误,请告诉我 我的目的是:将双变量保存在csv文件中,并将它们保存在java文件的arraylist中 到目前为止,我已经有了最新的代码,我是java的初学者,所以请不要激动 import java.io.*; import java.util.*; import java.lang.*; public class CsvProcessor { public static void main(String[] args) {

您好,这是我第一次发帖,如果我在提问过程中有任何错误,请告诉我

我的目的是:将双变量保存在csv文件中,并将它们保存在java文件的arraylist中

到目前为止,我已经有了最新的代码,我是java的初学者,所以请不要激动

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();
        }

    }
}
import java.io.*;
导入java.util.*;
导入java.lang.*;
公共类CSVP处理器{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
//在命令提示下请求文件路径,将输入的路径保存在path中
System.out.print(“文件路径:”);
字符串路径=键盘.next();
试一试{
//设置用于处理csv文件的文件、读取器和arraylist
java.io.File csv=新的java.io.File(路径);
BufferedReader BufferedReader=新的BufferedReader(新文件读取器(csv));
ArrayList csvEntry=新的ArrayList();
//设置StringTokenizer的参数
字符串行=”;
字符串分隔符=“,”;
//使用bufferedReader读取并使用csvEntry ArrayList保存
而((line=bufferedReader.readLine())!=null){
StringTokenizer StringTokenizer=新的StringTokenizer(行,分隔符);
while(stringTokenizer.hasMoreTokens()){
添加(stringTokenizer.nextToken());
}
}
csvEntry.toArray();
double[]csvDouble=新的double[csvEntry.getLength()];
对于(int i=0;i
我尝试了转换csv文件中的字符串并将其保存到arraylist中,然后将arraylist转换为数组,然后再将数组转换为双精度数组。 我得到的错误是:

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)
C:\Users\user\code\ktrt>JavaCSVProcessor
文件路径:C:\Users\user\code\ktrt\montyreal.csv
线程“main”java.lang.NumberFormatException中的异常:对于输入字符串:“5”
48.53"
位于java.lang.NumberFormatException.forInputString(未知源)
位于java.lang.Integer.parseInt(未知源)
位于java.lang.Integer。(未知源)
位于CsvProcessor.main(CsvProcessor.java:27)

非常感谢您的帮助。

首先,您的错误日志有误。您的代码没有
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);
List csvDouble=new ArrayList();
双平均值,总=0;
用于(原始字符串:csvEntry){
复式输入=复式。原始值;
总数+=条目;
csvDouble.add(条目);
}
平均值=总/csvDouble.size();
//在这一点上,你有你的ArrayList和平均值;
系统输出打印项次(“平均值为”+平均值);

希望这有帮助:)

看看错误代码是什么意思?我使用double.parsedouble(csventry[i])将保存在csventry中的字符串转换为double变量,然后我尝试将它们存储到csvdouble中,这是一个double数组列表。代码中没有
Integer.parseInt()
(在日志中声明)。您使用的是
Double.parseDouble()