繁体   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