gpt4 book ai didi

Java : Resizing a multidimensional array

转载 作者:搜寻专家 更新时间:2023-11-01 02:33:25 25 4
gpt4 key购买 nike

我有一个由字符串构建的多维数组,最初创建时大小为 [50][50],这太大了,现在数组中充满了空值,我目前正在尝试删除这些空值,我已经设法将数组的大小调整为 [requiredSize][50] 但无法进一步缩小,有人可以帮我吗?我在互联网上搜索过这样的答案,但找不到。

这也是我的完整代码(我意识到我的代码中可能有一些非常不干净的部分,我还没有清理任何东西)

import java.io.*;
import java.util.*;

public class FooBar
{
public static String[][] loadCSV()
{
FileInputStream inStream;
InputStreamReader inFile;
BufferedReader br;
String line;
int lineNum, tokNum, ii, jj;
String [][] CSV, TempArray, TempArray2;

lineNum = tokNum = ii = jj = 0;
TempArray = new String[50][50];

try
{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please enter the file path of the CSV");
String fileName = in.readLine();
inStream = new FileInputStream(fileName);
inFile = new InputStreamReader(inStream);
br = new BufferedReader(inFile);
StringTokenizer tok,tok2;


lineNum = 0;
line = br.readLine();
tokNum = 0;
tok = new StringTokenizer(line, ",");

while( tok.hasMoreTokens())
{
TempArray[tokNum][0] = tok.nextToken();
tokNum++;
}
tokNum = 0;
lineNum++;

while( line != null)
{
line = br.readLine();
if (line != null)
{
tokNum = 0;
tok2 = new StringTokenizer(line, ",");

while(tok2.hasMoreTokens())
{
TempArray[tokNum][lineNum] = tok2.nextToken();
tokNum++;
}
}
lineNum++;
}
}
catch(IOException e)
{
System.out.println("Error file may not be accessible, check the path and try again");
}

CSV = new String[tokNum][50];
for (ii=0; ii<tokNum-1 ;ii++)
{
System.arraycopy(TempArray[ii],0,CSV[ii],0,TempArray[ii].length);
}
return CSV;
}
public static void main (String args[])
{
String [][] CSV;
CSV = loadCSV();
System.out.println(Arrays.deepToString(CSV));
}
}

CSV 文件如下所示

Height,Weight,Age,TER,Salary
163.9,46.8,37,72.6,53010.68
191.3,91.4,32,92.2,66068.51
166.5,51.1,27,77.6,42724.34
156.3,55.7,21,81.1,50531.91

显然它可以采用任何大小,但这只是一个示例文件。

我只需要调整数组的大小,使其不包含任何空值。

我也知道列表在这里是更好的选择,但由于外部限制,这是不可能的。只能是多维数组。

最佳答案

我认为您需要对程序进行 3 处更改

  • 在您的 while 之后循环 lineNum将比文件中的行数多 1,而不是声明 CSVString[tokNum][50]声明为 CSV = new String[tokNum][lineNum-1];
  • tokNum将是一行中的字段数,因此您的 for 循环条件应为 ii<tokNum而不是 ii<tokNum-1
  • arraycopy 的最后一个参数应该是 lineNum-1

即修改后的代码来构建你的 CSV数组是:

CSV = new String[tokNum][lineNum-1];
for (ii=0; ii<tokNum ;ii++)
{
System.arraycopy(TempArray[ii],0,CSV[ii],0,lineNum-1);
}

然后输出将是:

[[Height, 163.9, 191.3, 166.5, 156.3], [Weight, 46.8, 91.4, 51.1, 55.7], 
[Age, 37, 32, 27, 21], [TER, 72.6, 92.2, 77.6, 81.1],
[Salary, 53010.68, 66068.51, 42724.34, 50531.91]]

请注意,您实际上不需要将文件的第一行与其他行分开处理,但这是您可以在清理过程中涵盖的内容。

关于Java : Resizing a multidimensional array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3961870/

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