gpt4 book ai didi

Java:如何有选择地将文件扫描到两个二维字符串数组中

转载 作者:行者123 更新时间:2023-11-30 07:21:20 25 4
gpt4 key购买 nike

如何有选择地将文件扫描到两个二维字符串数组中?

我有一个如下所示的文件:

2014 fruit apple red 50 30
2015 vegetable spinach green 10
2014 fruit orange orange 100
2014 fruit banana yellow 90 100
2015 vegetable corn yellow 120

我正在尝试读取文件并将每一行放入二维字符串数组(以空格分隔)中。我想要一个仅由以 2014 年开头的行组成的数组,以及另一个由以 2015 年开头的行组成的数组。

因为它是一个类,所以我坚持严格的参数:1.它必须来自文本文件,2.它必须进入两个二维数组。

我能够成功地将整个文件读入一个二维字符串数组,但我对两个数组所做的所有尝试似乎都失败了。这就是我所拥有的...成功的单个二维数组:

public static void main(String[] args) throws Exception {

//Initializes the variables needed to read the line length of the file
FileReader fr = null;
LineNumberReader lnr = null;
File newFile = new File("ProjectTest.txt");

//Initiallizes the variables needed to create the 2D array
BufferedReader inputStream = new BufferedReader(new FileReader(newFile));
Scanner scannerIn = new Scanner(inputStream);

//Other variables
int lineNum = 0;
int linesCounter = 0;
String str;

//Determines how many lines in the file
try {
fr = new FileReader(newFile);
lnr = new LineNumberReader(fr);
while (lnr.readLine() != null) {
lineNum++;
}
} catch (Exception e) {
System.out.println(e.getMessage());
} finally {
if (fr != null) {
fr.close();
}
if (lnr != null) {
lnr.close();
}
}

//Create the 2D array
String arrayA[][] = new String[lineNum][];

while (scannerIn.hasNextLine() && linesCounter < lineNum) {
arrayA[linesCounter] = scannerIn.nextLine().split("\\s");
linesCounter++;
}

//Test-print the array
for (int i = 0; i< lineNum; i++){
System.out.println(arrayA[i][2]);
}
}

我尝试了许多不同的方法来尝试将此数据放入两个数组中,但我认为我的困惑来自于了解何时以及如何使用扫描仪与缓冲读取器。我尝试过 if/then 语句,仅将 2014 行读入数组,并且尝试将一个数组复制到另一个数组。不用说,我都错了。这是使用 if/then 语句对两个二维数组进行的众多尝试之一:

String arrayA[][] = new String[lineNum][];
String arrayB[][] = new String[lineNum][];

String line = inputStream.readLine();

while (line != null) {
if (line.contains("2014")){
arrayA[linesCounter] = inputStream.readLine().split("\\s");
linesCounter++;
} else {
arrayB[linesCounter] = inputStream.readLine().split("\\s");
linesCounter++;
}
}

请帮帮我!!我感谢你们大家!

最佳答案

这是一种方法:

String[][] arrayA = new String[lineNum][];
String[][[ arrayB = new String[lineNum][];

int counterA = 0;
int counterB = 0;

while (scannerIn.hasNextLine()) {
String line = scannerIn.nextLine();
String[] parts = line.split("\\s");
if (line.startsWith("2014")) {
arrayA[counterA++] = parts;
} else if (line.startsWith("2015")) {
arrayB[counterB++] = parts;
}
}

// prune excess elements
arrayA = Arrays.copyOf(arrayA, counterA);
arrayB = Arrays.copyOf(arrayB, counterB);

关于Java:如何有选择地将文件扫描到两个二维字符串数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37518679/

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