java - 从导入的电子表格数据的字符串数组中获取特定 'elements' 的最简单方法?

标签 java

很抱歉问题的措辞有些尴尬。长话短说,我有一个 Excel 电子表格,其中包含纽约 10 个不同地区以及它们各自 2008 年至 2018 年的每周平均汽油价格。我的任务是提取布法罗每年的平均汽油价格。整个电子表格中的数据被放入一个字符串数组中,而我当前采用的方法绝对是错误的。

我该如何获取 2018 年布法罗每周的汽油价格?如果有人能给我一个先行一步的建议,我就能够完成剩下的几年,以及我的家庭作业的其他两部分。我相信我应该使用 StringBuilder,因为这就是我们当前在类里面介绍的内容。 (具体通过StringBuilder学习split、append、substring)

这是我当前的代码:

package Chapter9;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;

public class GasPrices {

    public static void main(String[] args) throws IOException {


        String[] gasData = getData(); // download gas price into an array

        StringBuilder sb = new StringBuilder();

        for(String s : gasData) {
            System.out.println(s);
            sb.append(s);
        }
    }



    public static String[] getData() throws IOException {

        URL url = new URL("https://cs.wcupa.edu/schen/csc240/Gasoline_Retail_Prices_Weekly_Average_by_Region__Beginning_2008.csv");
        URLConnection connection = url.openConnection();

        InputStreamReader input = new InputStreamReader(connection.getInputStream());
        BufferedReader buffer = null;
        StringBuilder data = new StringBuilder();

        String line = "";
        try {
            buffer = new BufferedReader(input);

            while ((line = buffer.readLine()) != null) {
                data.append(line + "\n");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (buffer != null) {
                try {
                    buffer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return data.toString().split("\n");
    }

}

我的输出如下所示:(仅输入 2017-2018 年的数据)

Date,New York State Average,Albany Average,Binghamton Average,Buffalo Average,Nassau Average,New York City Average,Rochester Average,Syracuse Average,Utica Average
12/31/18,2.64,2.51,2.55,2.7,2.58,2.7,2.61,2.52,2.62
12/24/18,2.69,2.56,2.61,2.75,2.63,2.75,2.66,2.57,2.67
12/17/18,2.72,2.59,2.65,2.8,2.67,2.78,2.69,2.6,2.71
12/10/18,2.76,2.62,2.69,2.86,2.7,2.81,2.74,2.64,2.75
12/3/18,2.8,2.67,2.75,2.9,2.75,2.86,2.78,2.68,2.78
11/26/18,2.85,2.72,2.8,2.93,2.79,2.91,2.82,2.72,2.82
11/19/18,2.88,2.75,2.84,2.95,2.83,2.94,2.85,2.77,2.85
11/12/18,2.92,2.8,2.89,2.97,2.88,2.98,2.89,2.82,2.89
11/5/18,2.95,2.83,2.91,2.98,2.93,3.03,2.91,2.85,2.91
10/29/18,2.97,2.85,2.93,2.99,2.96,3.06,2.93,2.89,2.92
10/22/18,2.99,2.87,2.94,2.99,2.98,3.09,2.95,2.91,2.94
10/15/18,3.01,2.89,2.96,3,2.99,3.1,2.97,2.94,2.97
10/8/18,3,2.9,2.95,2.99,2.99,3.1,2.97,2.94,2.97
10/1/18,2.99,2.86,2.91,2.99,2.97,3.09,2.93,2.91,2.94
9/24/18,2.99,2.87,2.92,2.99,2.98,3.1,2.94,2.92,2.93
9/17/18,3,2.88,2.93,2.99,2.99,3.1,2.96,2.93,2.94
9/10/18,3,2.89,2.93,2.99,2.98,3.09,2.95,2.93,2.95
9/3/18,2.99,2.87,2.92,2.99,2.98,3.09,2.92,2.89,2.94
8/27/18,2.99,2.87,2.92,2.99,2.99,3.1,2.93,2.9,2.95
8/20/18,3,2.88,2.94,2.99,3,3.11,2.94,2.92,2.97
8/13/18,3.01,2.89,2.95,3,3.01,3.1,2.96,2.93,2.97
8/6/18,3.01,2.9,2.96,3,3.01,3.1,2.97,2.93,2.97
7/30/18,3,2.88,2.92,3,3,3.1,2.95,2.9,2.96
7/23/18,3.01,2.89,2.93,3,3.01,3.1,2.95,2.91,2.97
7/16/18,3.02,2.91,2.95,3,3.03,3.11,2.97,2.92,2.98
7/9/18,3.02,2.92,2.97,3,3.03,3.12,2.98,2.92,2.98
7/2/18,3.02,2.92,2.94,3,3.02,3.11,2.96,2.9,2.98
6/25/18,3.03,2.94,2.96,3.01,3.04,3.13,2.98,2.93,3.01
6/18/18,3.06,2.97,2.98,3.01,3.07,3.16,3,2.98,3.04
6/11/18,3.08,2.99,3,3.02,3.1,3.19,3.02,3.01,3.07
6/4/18,3.09,3.01,3.01,3.01,3.12,3.21,3.03,3.04,3.08
5/28/18,3.09,3.01,3.02,2.99,3.12,3.2,3.03,3.05,3.09
5/21/18,3.04,2.94,3,2.94,3.07,3.14,2.98,3.01,3.04
5/14/18,2.98,2.87,2.94,2.89,3.01,3.08,2.91,2.95,2.97
5/7/18,2.95,2.84,2.92,2.86,2.99,3.05,2.88,2.92,2.94
4/30/18,2.92,2.82,2.91,2.81,2.96,3.02,2.87,2.9,2.91
4/23/18,2.85,2.76,2.84,2.77,2.88,2.94,2.83,2.83,2.84
4/16/18,2.79,2.7,2.77,2.73,2.81,2.88,2.73,2.74,2.76
4/9/18,2.77,2.68,2.74,2.71,2.79,2.86,2.71,2.71,2.74
4/2/18,2.76,2.65,2.74,2.71,2.78,2.85,2.71,2.71,2.73
3/26/18,2.71,2.61,2.7,2.68,2.71,2.79,2.67,2.66,2.7
3/19/18,2.69,2.6,2.68,2.66,2.68,2.76,2.63,2.61,2.7
3/12/18,2.7,2.61,2.69,2.67,2.69,2.77,2.65,2.62,2.71
3/5/18,2.71,2.62,2.7,2.67,2.71,2.79,2.67,2.64,2.72
2/26/18,2.73,2.64,2.7,2.68,2.73,2.8,2.68,2.66,2.73
2/19/18,2.75,2.66,2.72,2.68,2.76,2.82,2.69,2.69,2.75
2/12/18,2.77,2.68,2.75,2.69,2.78,2.85,2.71,2.72,2.76
2/5/18,2.76,2.68,2.74,2.68,2.79,2.85,2.7,2.72,2.76
1/29/18,2.73,2.64,2.71,2.66,2.75,2.81,2.67,2.68,2.72
1/22/18,2.69,2.6,2.65,2.64,2.69,2.78,2.63,2.62,2.66
1/15/18,2.67,2.59,2.63,2.63,2.65,2.75,2.62,2.61,2.65
1/8/18,2.66,2.58,2.62,2.62,2.63,2.74,2.59,2.59,2.64
1/1/18,2.63,2.53,2.59,2.62,2.6,2.72,2.55,2.53,2.6
12/25/17,2.62,2.52,2.58,2.63,2.6,2.72,2.54,2.52,2.58
12/18/17,2.64,2.54,2.6,2.64,2.61,2.73,2.55,2.53,2.6
12/11/17,2.66,2.57,2.62,2.65,2.63,2.75,2.58,2.56,2.62
12/4/17,2.68,2.6,2.63,2.65,2.66,2.77,2.6,2.58,2.63
11/27/17,2.68,2.61,2.64,2.65,2.67,2.78,2.61,2.59,2.64
11/20/17,2.7,2.63,2.65,2.66,2.68,2.79,2.64,2.6,2.65
11/13/17,2.69,2.63,2.64,2.65,2.67,2.8,2.64,2.6,2.64
11/6/17,2.65,2.59,2.6,2.64,2.62,2.77,2.6,2.54,2.6
10/30/17,2.64,2.58,2.59,2.65,2.6,2.77,2.56,2.48,2.59
10/23/17,2.65,2.6,2.61,2.67,2.62,2.78,2.56,2.46,2.62
10/16/17,2.68,2.62,2.64,2.69,2.66,2.81,2.61,2.5,2.66
10/9/17,2.72,2.65,2.68,2.71,2.71,2.85,2.66,2.56,2.68
10/2/17,2.76,2.67,2.71,2.73,2.76,2.88,2.71,2.64,2.72
9/25/17,2.79,2.7,2.74,2.75,2.81,2.93,2.75,2.7,2.75
9/18/17,2.82,2.72,2.76,2.76,2.85,2.96,2.76,2.75,2.77
9/11/17,2.82,2.72,2.76,2.73,2.87,2.97,2.74,2.74,2.78
9/4/17,2.58,2.48,2.53,2.51,2.63,2.72,2.51,2.49,2.53
8/28/17,2.48,2.34,2.43,2.43,2.51,2.61,2.41,2.36,2.42
8/21/17,2.48,2.35,2.43,2.42,2.52,2.61,2.42,2.38,2.42
8/14/17,2.48,2.36,2.43,2.38,2.53,2.62,2.42,2.39,2.43
8/7/17,2.47,2.35,2.42,2.37,2.52,2.61,2.4,2.38,2.41
7/31/17,2.44,2.32,2.38,2.35,2.48,2.59,2.36,2.33,2.38
7/24/17,2.42,2.3,2.36,2.34,2.45,2.58,2.35,2.3,2.37
7/17/17,2.41,2.28,2.36,2.34,2.44,2.57,2.34,2.27,2.36
7/10/17,2.42,2.29,2.36,2.34,2.44,2.58,2.34,2.28,2.37
7/3/17,2.43,2.3,2.38,2.35,2.46,2.59,2.36,2.29,2.38
6/26/17,2.45,2.32,2.39,2.37,2.47,2.6,2.38,2.31,2.4
6/19/17,2.48,2.36,2.42,2.41,2.5,2.62,2.41,2.35,2.42
6/12/17,2.5,2.39,2.44,2.42,2.52,2.63,2.43,2.38,2.44
6/5/17,2.51,2.42,2.47,2.43,2.53,2.64,2.45,2.41,2.46
5/29/17,2.51,2.43,2.47,2.43,2.53,2.64,2.44,2.4,2.45
5/22/17,2.5,2.42,2.45,2.43,2.52,2.63,2.42,2.38,2.45
5/15/17,2.51,2.43,2.46,2.45,2.53,2.63,2.43,2.4,2.46
5/8/17,2.52,2.44,2.48,2.47,2.55,2.64,2.45,2.43,2.48
5/1/17,2.54,2.46,2.5,2.49,2.56,2.65,2.47,2.46,2.5
4/24/17,2.53,2.47,2.51,2.49,2.54,2.64,2.47,2.51,2.5
4/17/17,2.51,2.44,2.49,2.48,2.51,2.62,2.45,2.44,2.48
4/10/17,2.47,2.37,2.41,2.43,2.47,2.6,2.39,2.37,2.42
4/3/17,2.43,2.31,2.37,2.4,2.42,2.58,2.34,2.3,2.37
3/27/17,2.42,2.31,2.37,2.4,2.42,2.58,2.34,2.29,2.36
3/20/17,2.43,2.31,2.37,2.41,2.44,2.59,2.35,2.3,2.37
3/13/17,2.44,2.31,2.38,2.41,2.45,2.59,2.35,2.31,2.38
3/6/17,2.45,2.32,2.39,2.42,2.47,2.61,2.36,2.33,2.39
2/27/17,2.47,2.34,2.4,2.43,2.49,2.62,2.37,2.34,2.41
2/20/17,2.48,2.36,2.41,2.44,2.51,2.63,2.39,2.35,2.41
2/13/17,2.48,2.36,2.41,2.44,2.51,2.64,2.4,2.33,2.41
2/6/17,2.5,2.38,2.43,2.46,2.52,2.65,2.42,2.36,2.42
1/30/17,2.51,2.4,2.46,2.46,2.54,2.66,2.45,2.38,2.45
1/23/17,2.53,2.43,2.48,2.47,2.56,2.66,2.47,2.42,2.46
1/16/17,2.54,2.45,2.5,2.47,2.57,2.66,2.48,2.44,2.48
1/9/17,2.54,2.46,2.51,2.46,2.57,2.66,2.48,2.44,2.49
1/2/17,2.49,2.41,2.46,2.42,2.53,2.62,2.43,2.4,2.46

最佳答案

您可以将所有行存储到一个二维数组中,例如data:

StringBuilder sb = new StringBuilder(input);

int rows = sb.toString().split("\n").length;
int cols = sb.toString().split("\n").split(",").length;

String[] data = new String[rows][cols];

现在,data 的每一行存储特定日期的值,该日期位于索引 0,即 data[0]

要访问 Buffalo 每个日期的数据,请创建一个遍历 data 的每个的循环,并提取每行索引 4 处的元素,即 数据[i][4]:

for(int i = 0; i < rows; i++)
{
    System.out.println("The date is: "+data[i][0]);
    System.out.println("Buffalo's average is: "+data[i][4]);
}

关于java - 从导入的电子表格数据的字符串数组中获取特定 'elements' 的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60220029/

相关文章:

java - 当抛出 throws 'ConcurrentModificationException' 时,快速失败迭代器如何知道底层结构已修改?

java - 函数指针作为 Java 8 中的参数

java - 如何检索 OWLapi 中专用类的子类?

java - 无法实例化类 : com. ibm.Websphere.naming.WsnInitialContextFactory

java - 从 Java 调用时,FFMPEG 不会生成有效的 mp4 输出

java - Appengine 向 HRD 数据存储区的迁移陷入复制阶段

java - 在 Java 中无法访问 Maven 依赖项

Java 项目可能因循环错误而崩溃

java - JOOX 自闭合 XML 标签

java - 第一个 Java EE Spring 项目的 "best practice"是什么?