2017-08-11 33 views
0

存儲在數組列表中的特定值,我的文本文件看起來像這樣如何顯示使用Java

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 

我已經使用了下面的代碼片段由行的文本行存儲在一個數組列表,並顯示整個文件作爲輸出。

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。

+0

問題是什麼? – Turing85

+0

假設你需要找到一個'temps.get(INDEX)'用'INDEX'來處理元素索引 –

+0

你在這裏有什麼問題?你不知道如何分手?你想知道如何通過分隔符分割一個字符串?你想打破寬度的一條線?你想知道如何存儲每條分解線?你想知道如何從「分解」行訪問一個字段? –

回答

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讀者字典界面 - 這可以讓你的每一行從[列名]映射到[該行中的列值]

0

如果這些列與某些(可能是嵌套的)業務規則(對象圖)相互綁定,並且在應用程序中很有用,那麼您可以使用面向對象方法,即將每行作爲對象並將列映射爲不同的屬性(包含子對象)。例如

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 
} 

這樣完整的數據被映射到集合(可能是List),那麼我們就可以用它的方式,我們希望通過迭代,比較,分類等

如果這些字段不是特殊對象到應用程序,但正如字符串標記,然後如已經建議,兩維列表是更好的選擇。

如果它的唯一目的是過濾數據,然後讀取它自己,我們可以忽略不需要的列。