【问题标题】:Using FileInputStream, Scanner, next(), and useDelimiter read multi-line .txt files使用 FileInputStream、Scanner、next() 和 useDelimiter 读取多行 .txt 文件
【发布时间】:2016-10-08 03:22:17
【问题描述】:

我有一个文本文件,其中包含:

griffin.keyes   108de81c31bf9c622f76876b74e9285f    "alphabet soup" zookeeper
rosario.dawson  3e34baa4ee2ff767af8c120a496742b5    "animal doctor" admin
bernie.gorilla  a584efafa8f9ea7fe5cf18442f32b07b    "secret password"   veterinarian
donald.monkey   17b1b7d8a706696ed220bc414f729ad3    "M0nk3y business"   zookeeper
jerome.grizzlybear  3adea92111e6307f8f2aae4721e77900    "grizzly1234"   veterinarian
bruce.grizzlybear   0d107d09f5bbe40cade3de5c71e9e9b7    "letmein"   admin

我正在使用以下代码将其读入二维数组:

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Scanner;

public class Credentials {
    private FileInputStream fileByteStream = null; // File input stream
    private Scanner inFS = null;                   // Scanner object
    final private String [][] credArray = new String[6][4];        

    public String[][] credArray() throws IOException {
        int i = 0;                                 // Index variable
        int j = 0;                                 // Index variable

        // Import credentials data.
        fileByteStream = new FileInputStream("credentials.txt");
        inFS = new Scanner(fileByteStream);

        // Use carriage return and tab as token separators
        inFS.useDelimiter("[\\r\\t]");

        // Create array of credentials.txt
        for (i = 0; i < NUM_ROWS_CRED; ++i) {
            for (j = 0; j < NUM_COLS_CRED; ++j) {
                credArray[i][j] = inFS.next();
            }
        }
        fileByteStream.close(); //Closes file.
        return credArray;
    } 
}

读取第一行没有问题。第 2-6 行靠近第一个字符串,前面添加了\n。例如:\nrosario.dawson

我怀疑分隔符有问题,但我不确定还可以使用什么。我尝试使用("[\\r\\n\\t]"),但这只是用"" 为每行抵消了第一行之后的所有内容。我该如何解决这个问题?

【问题讨论】:

  • 这可能是实际上一个制表符分隔的文件吗?有用于阅读这些和处理引用列的库。
  • 据我所知,4 列由 3 个制表符分隔,每一行后面都有一个回车。另外,很遗憾,我只能使用标题中列出的代码选项。

标签: java arrays delimiter


【解决方案1】:

我想出了自己问题的解决方案。

问题在于这段代码:

// Create array of credentials.txt
    for (i = 0; i < NUM_ROWS_CRED; ++i) {
        for (j = 0; j < NUM_COLS_CRED; ++j) {
            credArray[i][j] = inFS.next();
        }
    }

我需要更正从扫描仪inFS 读取信息到阵列credArray 的方式。我通过将代码更改为:

// Create array of credentials.txt
    for (i = 0; i < NUM_ROWS_CRED; ++i) {
        for (j = 0; j < NUM_COLS_CRED; ++j) {
            credArray[i][j] = inFS.next().replaceAll("\\n", "");
        }
    }

这会自动删除第 2-6 行的任何换行代码条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-15
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    相关资源
    最近更新 更多