gpt4 book ai didi

java - 将 .txt 文件中的字符串读入二维数组;忽略引号中的空格;仅使用 JDK

转载 作者:太空宇宙 更新时间:2023-11-04 12:11:04 26 4
gpt4 key购买 nike

我经常访问这个网站,但我遇到了一些我无法回答的问题。这与这里的其他几篇文章类似,但我还没有找到我正在寻找的答案。

请注意,这是学校类(class)的一部分,目前是一个较大的 java 项目的独立 java 类。目前,我无法编辑 .txt 文件,并且只能使用以下资源:

标准 JDK 资源

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

使用以下列表:

john.doe    108de81c31bf9c622f76876b74e9285f    "dead man"  user
jane.doe 3e34baa4ee2ff767af8c120a496742b5 "dead woman" admin
barney.rubble a584efafa8f9ea7fe5cf18442f32b07b "secret password" mod
fred.flinstone 17b1b7d8a706696ed220bc414f729ad3 "R0ck3y business" user
luke.skywalker 3adea92111e6307f8f2aae4721e77900 "usetheforce1234" mod
leah.skywalker 0d107d09f5bbe40cade3de5c71e9e9b7 "saveme" admin

每个条目都用制表符分隔。

我当前的java代码如下:

public static void main(String[] args) throws IOException {
FileInputStream credFile = null; // File input
Scanner inFS = null; // Scanner object

final int NUM_ROWS_CRED = 6;
final int NUM_COLS_CRED = 4;
String[][] credArray = new String[NUM_ROWS_CRED][NUM_COLS_CRED];
int i = 0; // Index variable
int j = 0; // Index variable

// Import file data from file.txt
credFile = new FileInputStream("file.txt");
inFS = new Scanner(credFile);

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

// Output array to verify array stored correctly.
for (i = 0; i < NUM_ROWS_CRED; ++i) {
for (j = 0; j < NUM_COLS_CRED; ++j) {
System.out.println(credArray[i][j] + " ");
}
System.out.println("");
}

credFile.close(); //Closes file.
}

我当前的输出如下所示: 约翰·多伊 108de81c31bf9c622f76876b74e9285f “死的 男人”

user 
jane.doe
3e34baa4ee2ff767af8c120a496742b5
"dead

woman"
admin
barney.rubble
a584efafa8f9ea7fe5cf18442f32b07b

"secret
password"
mod
fred.flinstone

17b1b7d8a706696ed220bc414f729ad3
"R0ck3y
business"
user

luke.skywalker
3adea92111e6307f8f2aae4721e77900
"usertheforce1234"
mod

预期输出: 约翰·多伊 108de81c31bf9c622f76876b74e9285f “死人” 用户

jane.doe
3e34baa4ee2ff767af8c120a496742b5
"dead woman"
admin

等等...

欢迎提供正确方向的解决方案、指导和指示。另外,请记住,我严格限制不编辑 .txt 文件,并且只使用 JDK 和列出的 3 个资源。谢谢。

最佳答案

您熟悉正则表达式吗?它们是解决您的问题的关键。

就像 @cricket_007 已经评论的那样,默认的 Scanner 分隔符是空格。这就是扫描仪将引用的标记分开的原因,我相信这是您希望扫描仪不做的事情。所以你必须告诉扫描仪如何分割输入 token 。

在一行中,标记由制表符分隔,行由换行符分隔。所以你可以像这样指示扫描仪:

inFS.useDelimiter("[\\t\\R]");

这样,扫描器将给出引用的 token 作为一个整体。此正则表达式意味着分割由制表符或任何换行符分隔的标记Pattern Javadoc

如果输入中没有换行符,则正则表达式会更简单:

inFS.useDelimiter("\\t");

如果不允许使用正则表达式,您将不得不找出另一种方法来处理带引号的标记。

关于java - 将 .txt 文件中的字符串读入二维数组;忽略引号中的空格;仅使用 JDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39863191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com