【问题标题】:How to display a specific value stored in an array list using Java如何使用 Java 显示存储在数组列表中的特定值
【发布时间】:2018-01-19 09:03:37
【问题描述】:

我的文本文件是这样的

 STID  STNM  TIME     TMAX TMAXO     TMIN TMINO    TAVG     TBAD     DMAX DMAXO     DMIN DMINO    DAVG    VDEF     DBAD     SMAX SMAXO     SMIN SMINO    SAVG     SBAD     BMAX BMAXO     BMIN BMINO    BAVG     BBAD     S5MX S5MXO     S5MN S5MNO    S5AV     S5BD     S25X S25XO     S25N S25NO   S25AV    S25BD     S60X S60XO     S60N S60NO   S60AV    S60BD     HMAX HMAXO     HMIN HMINO    HAVG     HBAD     PMAX PMAXO     PMIN PMINO    PAVG    MSLP     PBAD     AMAX AMAXO     ATOT     ABAD     PDIR     PDFQ     SDIR     SDFQ     IBAD     WSMX WSMXO     WSMN WSMNO    WSPD    WDEV    WMAX WMAXO     WBAD     RAIN     RNUM    RMAX     RBAD    9AVG     9BAD     2MAX     2MIN     2AVG     2DEV     2BAD     HDEG     CDEG     HTMX HTMXO    HTBAD     WCMN WCMNO    WCBAD
 ACME   110     0    76.32   131    69.22   184   71.57        0    69.10   286    61.55     3   66.48    4.22        0    83.16     3    78.24   288   80.85        0    85.37     3    77.74   288   81.77        0    83.12   150    77.86   288   80.58        0    83.84     3    81.23   288   82.34        0    81.54     3    80.94   285   81.29        0    96.82   278    66.82     1   84.59        0    28.74   284    28.67    23   28.71   30.10        0   412.73   130     5.46        0     -996     -999     -996     -999       59    10.92   132     0.00    37    4.34    2.41   14.61   146        0     0.22       19    0.24        0   71.67        0     8.44     0.00     2.49     2.30        0     0.00     7.77     -996   999      288     -996   999      288
 ADAX     1     0    73.99    96    68.61    21   71.32        0    70.91   169    62.77     1   68.22    2.58        0    87.15     3    82.99   288   84.83        0    88.32     3    79.54   288   83.59        0    85.06     3    81.84   288   83.31        0    88.48     3    85.21   288   86.61        0     -996   999     -996   999    -996       96    98.40   274    73.27     1   90.20        0    29.08   137    29.01    17   29.04   30.08        0   210.42   151     5.23        0     -996     -999     -996     -999      139    12.83   106     0.00    33    3.65    3.03   19.28   121        0     0.24       23    0.24        0   71.57        0     8.84     0.00     2.07     2.48        0     0.00     6.30     -996   999      288     -996   999      288
 ALTU     2     0    75.51   107    68.74   168   71.63        0    70.43   279    64.56   125   67.48    3.50        0    80.60     3    77.88   288   78.91        0    79.11     3    75.96   288   77.08        0    79.97     3    77.23   288   78.41        0    81.95     3    79.57   288   80.55        0     -996   999     -996   999    -996       96    98.36   286    70.28   106   87.18        0    28.68   276    28.60    51   28.64   30.09        0   202.20   123     5.03        0        2    30.80        4    18.63       25    13.72   128     0.00    70    5.79    2.71   18.19   128        0     0.19       19    0.12        0   71.53        0     9.55     0.00     3.71     2.22        0     0.00     7.12     -996   999      288     -996   999      288

我已经使用下面的代码 sn-p 将文本逐行存储在数组列表中,并将整个文件显示为输出。

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Stack {

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


    // create token1
    String token1 = "";

    /

    // create Scanner inFile1
    Scanner inFile1 = new Scanner(new File("daily.txt")).useDelimiter(",\\s*");



    List<String> temps = new ArrayList<String>();

    // while loop
    while (inFile1.hasNext()) {
      // find next line
      token1 = inFile1.next();
      temps.add(token1);
    }
    inFile1.close();

    String[] tempsArray = temps.toArray(new String[0]);

    for (String s : tempsArray) {
      System.out.println(s);
    }
  }
}

但我只想显示三列 TMAX、TMIN、DMAX。

【问题讨论】:

  • 问题是什么?
  • 假设你需要用temps.get(INDEX) 找到一个解决方法,INDEX 是元素的索引
  • 您有什么问题吗?你不知道怎么拆线?您想知道如何通过分隔符拆分字符串吗?你想按宽度分割一条线吗?您想知道如何存储每条断线吗?您想知道如何从“分解”行访问字段吗?

标签: java file arraylist


【解决方案1】:

这看起来像一个制表符分隔值文件 - 在制表符上拆分行怎么样?

// Make this a list of arrays of Strings
List<String[]> temps = new ArrayList<String[]>(); 

// while loop
while (inFile1.hasNext()) {
  // find next line
  token1 = inFile1.next();
  temps.add(token1.split('\t')); // split the line on tab characters
}
inFile1.close();
// this is not necessary for your implementation or mine
// String[] tempsArray = temps.toArray(new String[0]);

for (String[] s : temps) {
  // TMAX, TMIN, and DMAX are the 4th, 6th, and 10th items in each row respectively
  System.out.println(s[3] + " " + s[5] + " " + s[9]);
}

如果您想要更健壮的东西,您可以使用带有字典接口的 CSV/TSV 阅读器 - 这可以让您将每一行作为从 [列名] 到 [该行中的列值] 的映射

【讨论】:

    【解决方案2】:

    如果这些列通过一些(可能是嵌套的)业务规则(对象图)相互绑定并且在应用程序中很有用,那么您可以通过将每一行映射为一个对象并将列映射为不同的属性来使用面向对象的方法(包含子对象)。例如

    public class Row {
        private String Stid;    // choose appropriate name and type for each
        private int STNM;
        ...
        //probably (TMAX, TMAXO, TMIN, TMINO) being closely related may go as 
        // contained object
        //  ...
        //appropriate object graph
    }
    

    这样将完整的数据映射到集合中的Objects(可能是List),然后我们可以通过迭代、比较、排序等方式使用它。

    如果这些字段对应用程序来说不是特殊的,而只是作为字符串标记,那么正如已经建议的那样,二维列表是更好的选择。

    如果它的唯一目的是过滤数据,那么在读取自身时我们可以忽略不需要的列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多