【问题标题】:How to read in 1 specific column of a txt file and store into an Array or ArrayList [Java]如何读取 txt 文件的 1 个特定列并存储到 Array 或 ArrayList [Java]
【发布时间】:2020-09-23 20:09:09
【问题描述】:

The txt file I need to pull data from. I am only concerned with the STID column as I need to compare their Hamming distances with other inputted STID names in another part of the program

Trial code using a Scanner

我正在考虑使用 BufferedReader(尽管在我的第一次试用中我使用了 Scanner),然后使用 .add() 将数据提取到 ArrayList 中,但由于我是编程新手,所以不知道如何实现。任何帮助将不胜感激

【问题讨论】:

  • 在论坛中发布代码/数据而不是图像。您的代码是否使用扫描仪获得了您期望的值?第一步是获取数据并使用 System.out.println(...) 进行验证。然后,一旦您知道数据有效,您就可以将数据添加到 ArrayList。一次解决一个问题。
  • 当我尝试验证它正在输出文件中的所有数据,而不仅仅是我需要的 4 位 STID。所以从txt文件中提取必要的字符串是个问题。

标签: java arraylist


【解决方案1】:

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

获取 STID 列非常简单,因为它是第一个并且总是从行首开始。

我会做什么:只需使用 nextLine() 几次即可跳过您不感兴趣的行。一旦您到达包含第一个 STID 的第一行,nextLine() 方法将为您提供整行。 似乎 STID 总是 4 个字符长,因此您可以使用该行上的 substring(0,4) 方法仅获取您想要的 4 个字符。一旦你有了这个,你可以把这个子字符串添加到你的 ArrayList 中。

【讨论】:

  • 所以我只需执行 5 次 nextLine() 即可获得我的第一个 STID,然后使用 substring(0,4) 仅提取该行的前 4 个字符,然后重复直到我拥有每个 STID
  • 所以我实现了一个while循环,并做了5次“scanner.nextLine()”来获得我的第一个ID,然后做了scanner.nextLine().substring(0,4);但我收到“在 java.util.Scanner.nextLine(unknown source) 错误处找不到行。有什么想法吗?
  • @acc13241:你检查了txt文件的结尾吗?
  • 我的while循环是“while(scanner.hasNextLine());”所以我想是的,除非这是错误的。
【解决方案2】:

我走的是 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 个大写字母和数字组合并将它们放入数组中,然后打印出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多