簡體   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