簡體   English   中英

如何讀入 txt 文件的 1 個特定列並將其存儲到 Array 或 ArrayList [Java]

[英]How to read in 1 specific column of a txt file and store into an Array or ArrayList [Java]

我需要從中提取數據的txt文件。 我只關心 STID 列,因為我需要在程序的另一部分將它們的漢明距離與其他輸入的 STID 名稱進行比較

使用掃描儀的試用代碼

我正在考慮使用 BufferedReader(盡管在我的第一次試用中我使用了掃描儀),然后使用 .add() 將數據提取到一個 ArrayList 中,但我不知道如何實現這一點,因為我是編程新手。 任何幫助將不勝感激

使用 Scanner 對象的 nextLine() 方法( https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine() ),您可以獲得文本文件的每一行.

獲取 STID 列非常容易,因為它是第一個並且始終從行的開頭開始。

我會做什么:只需使用 nextLine() 幾次以跳過您不感興趣的行。一旦到達包含第一個 STID 的第一行,nextLine() 方法將為您提供整行。 似乎 STID 總是 4 個字符長,因此您可以使用該行上的 substring(0,4) 方法來僅獲取您想要的 4 個字符。 一旦你有了這個,你就可以把這個子字符串添加到你的 ArrayList 中。

我去了 BufferedReader 路線,並想出了這個:

import java.util.ArrayList;
import java.util.List;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Mesonet {
  public static void main(String[] args) {

    try {
      List<String> STIDS = new ArrayList<String>();
      BufferedReader reader = new BufferedReader(
                              new FileReader("Mesonet.txt"));
      Pattern p = Pattern.compile("^([A-Z0-9]{4}).*");

      reader.readLine(); // repeat as necessary to skip headers...
      while (reader.ready()) {
        String line = reader.readLine();
        Matcher m = p.matcher(line);
        if (m.matches()) {
          STIDS.add(m.group(1));
        }
      }

      for (String STID : STIDS) {
        System.out.println(STID);
      }
    }
    catch (FileNotFoundException err) {
      System.out.println("Where is the file?");
    }
    catch (IOException err) {
      System.out.println("IO Problem");
    }
  }
}

這將匹配前 4 個大寫字母和數字組合並將它們放入數組中,然后打印出來。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM