繁体   English   中英

将.txt文件中的双精度读入数组

[英]Reading Doubles from .txt File into Array

我刚刚开始使用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);
        }
    }
 }

我需要将这些行读入数组中,以便在显示与这些价格相关的周数和月份以及每个月的平均汽油价格时,可以计算出最低的平均汽油价格和最高的平均汽油价格。 考虑到我需要在一个程序中显示的所有信息,我不确定该阵列的最佳设置是什么。

我已经四处搜寻,并且找到了将双精度型读入数组的方法(如果这就是文件中包含的全部内容),但是我不知道如何从每一行中选择双精度型而不会导致类型错误或其他我搞砸的事情。

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

根据我对您帖子的理解,您想将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);
        }
    }
}

似乎每一行都固定在文本文件中,因此您可以将它们放入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));
}

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

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

double total = 0;
for (String key : myMap.keySet()) {
    if (key.startsWith("Jan")) {
        total += Double.parseDouble(myMap.get(key));
    }
}
   BufferedReader br = null;
    try {
        br = new 
            BufferedReader(newFileReader("1994_weekly_gas_averages.txt"));
        String line;
        while ((line = br.readLine()) != null) {
            if(isDouble(line))
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (br != null) {
                br.close();
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
       }

     }

  static boolean isDouble(String str) {
     try {
        Double.parseDouble(str);
        return true;
     } catch (NumberFormatException e) {
        return false;
     }
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM