从.txt文件读取双打到数组

时间:2018-02-14 10:21:05

标签: java arrays

我刚刚开始使用java,我正在尝试将.txt文件中的数据读入ArrayArrayList。该文件有52行(一年中每周一行),表示一周开始的日期和当周的平均天然气成本。这是文件的内容:

Jan 03, 1994    0.992
Jan 10, 1994    0.995
Jan 17, 1994    1.001
Jan 24, 1994    0.999
Jan 31, 1994    1.005
Feb 07, 1994    1.007
Feb 14, 1994    1.016
Feb 21, 1994    1.009
Feb 28, 1994    1.004
Mar 07, 1994    1.007
Mar 14, 1994    1.005
Mar 21, 1994    1.007
Mar 28, 1994    1.012
Apr 04, 1994    1.011
Apr 11, 1994    1.028
Apr 18, 1994    1.033
Apr 25, 1994    1.037
May 02, 1994    1.04
May 09, 1994    1.045
May 16, 1994    1.046
May 23, 1994    1.05
May 30, 1994    1.056
Jun 06, 1994    1.065
Jun 13, 1994    1.073
Jun 20, 1994    1.079
Jun 27, 1994    1.095
Jul 04, 1994    1.097
Jul 11, 1994    1.103
Jul 18, 1994    1.109
Jul 25, 1994    1.114
Aug 01, 1994    1.13
Aug 08, 1994    1.157
Aug 15, 1994    1.161
Aug 22, 1994    1.165
Aug 29, 1994    1.161
Sep 05, 1994    1.156
Sep 12, 1994    1.15
Sep 19, 1994    1.14
Sep 26, 1994    1.129
Oct 03, 1994    1.12
Oct 10, 1994    1.114
Oct 17, 1994    1.106
Oct 24, 1994    1.107
Oct 31, 1994    1.121
Nov 07, 1994    1.123
Nov 14, 1994    1.122
Nov 21, 1994    1.113
Nov 28, 1994    1.117
Dec 05, 1994    1.127
Dec 12, 1994    1.131
Dec 19, 1994    1.134
Dec 26, 1994    1.125

我无法将文件读入ArrayList。这就是我到目前为止所做的:

import java.io.*;
import java.util.ArrayList;

public class GasPrices 
{
    public static void main(String[] args) throws IOException
    {
        String fileName = "1994_weekly_gas_averages.txt";

        ArrayList<Double> gas = new ArrayList<>();

        try  
        {
            FileReader reader = new FileReader(fileName);
            BufferedReader bReader = new BufferedReader(reader);
            String line;

            while ((line = bReader.readLine()) !=null)
            {
                String g = String.valueOf(line);
                gas.add(Double.parseDouble(g));
                System.out.println(gas);
             }
         } catch (IOException e)
        {
            System.out.println("Exception: " + e);
        }
    }
 }

我需要将这些线条读入一个阵列,我可以用它来计算最低平均天然气价格和最高平均天然气价格,同时显示与这些价格相关的周数和月份,以及每个月的平均天然气价格。我不确定这个阵列的最佳设置是什么,将我需要在一个程序中显示的所有信息考虑在内。

我已经四处搜索,并找到了将双打读入数组的方法,如果这是文件中包含的所有内容,但我不知道如何从每一行中挑出双重而没有冲突的类型错误或其他任何我搞砸了

4 个答案:

答案 0 :(得分:0)

您尝试将所有行解析为Double ... 您需要获取子字符串或拆分当前行或使用regexp

答案 1 :(得分:0)

根据我对你的帖子的理解,你想要存储txt文件中每行的double值并存储在arraylist中,这里是相同的代码。您可以根据需要进一步使用它。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class GasPrices {

    public static void main(String[] args) throws IOException
    {
        String fileName = "1994_weekly_gas_averages.txt";

        ArrayList<Double> gas = new ArrayList<>();

        try  
        {
            FileReader reader = new FileReader(fileName);
            BufferedReader bReader = new BufferedReader(reader);
            String line;

            while ((line = bReader.readLine()) !=null)
            {
                String g = String.valueOf(line);
                String dateStr = g.substring(0, 12);
                String doubleStr = g.substring(16);
                System.out.println("dateStr>>"+dateStr);
                System.out.println("doubleStr>>"+doubleStr);
                gas.add(Double.valueOf(doubleStr));
                System.out.println();


//                gas.add(Double.parseDouble(g));
//                System.out.println(gas);
             }
            System.out.println("gas.size()>>"+gas.size());
         } catch (IOException e)
        {
            System.out.println("Exception: " + e);
        }
    }
}

答案 2 :(得分:0)

因为似乎每行都在您的文本文件中修复,您可以将它们放入HashMap并从那里开始工作:

File file = new File("1994_weekly_gas_averages.txt");
Scanner sc = new Scanner(file);
while (sc.hasNextLine()) {
    String s = sc.nextLine();
    myMap.put(s.substring(0, 12), s.substring(15));
}

然后,您必须获取所有匹配的密钥及其值,以计算平均值。

例如,1月份的总数可以通过以下方式获得:

double total = 0;
for (String key : myMap.keySet()) {
    if (key.startsWith("Jan")) {
        total += Double.parseDouble(myMap.get(key));
    }
}

答案 3 :(得分:0)

IN('1')