有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用FileInputStream、Scanner、next()和useDelimiter read multiline。txt文件

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

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]"),但这只是用""来抵消第一行之后的所有内容。我该如何着手纠正这个问题


共 (1) 个答案

  1. # 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行的任何新行代码条目