在 java 中初始化具有动态大小的二维字符串数组
initialize two dimensional string array with dynamic size in java
我有未知数量的记录,我需要将所有记录放入字符串二维数组中。
我不知道记录数,因此,不知道字符串二维数组初始化所需的行数和列数。
目前我使用如下:
String[][] data = new String[100][100];
这里我对行数和列数进行了硬编码,但需要字符串 2d 数组中允许的动态大小。任何建议请!
Rgrds
您可以将它们暂时存储在List<String[]>
中,然后使用List#toArray(String[])
将其转换为二维数组。
例子
public static void main(String[] args) throws IOException {
BufferedReader r = new BufferedReader(new FileReader(new File(
"data.txt")));
String line;
List<String[]> list = new ArrayList<String[]>();
while ((line = r.readLine()) != null)
list.add(line.split(" +"));
String[][] data = new String[list.size()][];
list.toArray(data);
for (int i = 0; i < data.length; ++i) {
for (int j = 0; j < data[i].length; ++j)
System.out.print(data[i][j]+" ");
System.out.println();
}
r.close();
}
Data.txt
1 2 3 4 5
2 5 3
2 5 5 8
输出
1 2 3 4 5
2 5 3
2 5 5 8
您可以简单地用文字空二维数组进行初始化:
String[][] data = new String[][]{{}}
这应该有效:
public static void main(String args[]) throws IOException {
// create the object
String[][] data;
// ----- dinamically know the matrix dimension ----- //
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int r = Integer.parseInt(bufferedReader.readLine());
int c = Integer.parseInt(bufferedReader.readLine());
// ------------------------------------------------ //
// allocate the object
data = new String[r][c];
// init the object
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
data[i][j] = "hello";
}
在此示例中,您知道矩阵维度运行时,通过控制台手动指定它。
您可以使用以下 class 将您的数据存储在 HashMap
中并能够将其转换为二维字符串数组。
public class ArrayStructure {
private HashMap<Point, String> map = new HashMap<Point, String>();
private int maxRow = 0;
private int maxColumn = 0;
public ArrayStructure() {
}
public void add(int row, int column, String string) {
map.put(new Point(row, column), string);
maxRow = Math.max(row, maxRow);
maxColumn = Math.max(column, maxColumn);
}
public String[][] toArray() {
String[][] result = new String[maxRow + 1][maxColumn + 1];
for (int row = 0; row <= maxRow; ++row)
for (int column = 0; column <= maxColumn; ++column) {
Point p = new Point(row, column);
result[row][column] = map.containsKey(p) ? map.get(p) : "";
}
return result;
}
}
示例代码
public static void main(String[] args) throws IOException {
ArrayStructure s = new ArrayStructure();
s.add(0, 0, "1");
s.add(1, 1, "4");
String[][] data = s.toArray();
for (int i = 0; i < data.length; ++i) {
for (int j = 0; j < data[i].length; ++j)
System.out.print(data[i][j] + " ");
System.out.println();
}
}
输出
1
4
我有未知数量的记录,我需要将所有记录放入字符串二维数组中。
我不知道记录数,因此,不知道字符串二维数组初始化所需的行数和列数。
目前我使用如下:
String[][] data = new String[100][100];
这里我对行数和列数进行了硬编码,但需要字符串 2d 数组中允许的动态大小。任何建议请!
Rgrds
您可以将它们暂时存储在List<String[]>
中,然后使用List#toArray(String[])
将其转换为二维数组。
例子
public static void main(String[] args) throws IOException {
BufferedReader r = new BufferedReader(new FileReader(new File(
"data.txt")));
String line;
List<String[]> list = new ArrayList<String[]>();
while ((line = r.readLine()) != null)
list.add(line.split(" +"));
String[][] data = new String[list.size()][];
list.toArray(data);
for (int i = 0; i < data.length; ++i) {
for (int j = 0; j < data[i].length; ++j)
System.out.print(data[i][j]+" ");
System.out.println();
}
r.close();
}
Data.txt
1 2 3 4 5
2 5 3
2 5 5 8
输出
1 2 3 4 5
2 5 3
2 5 5 8
您可以简单地用文字空二维数组进行初始化:
String[][] data = new String[][]{{}}
这应该有效:
public static void main(String args[]) throws IOException {
// create the object
String[][] data;
// ----- dinamically know the matrix dimension ----- //
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int r = Integer.parseInt(bufferedReader.readLine());
int c = Integer.parseInt(bufferedReader.readLine());
// ------------------------------------------------ //
// allocate the object
data = new String[r][c];
// init the object
for (int i = 0; i < r; i++)
for (int j = 0; j < c; j++)
data[i][j] = "hello";
}
在此示例中,您知道矩阵维度运行时,通过控制台手动指定它。
您可以使用以下 class 将您的数据存储在 HashMap
中并能够将其转换为二维字符串数组。
public class ArrayStructure {
private HashMap<Point, String> map = new HashMap<Point, String>();
private int maxRow = 0;
private int maxColumn = 0;
public ArrayStructure() {
}
public void add(int row, int column, String string) {
map.put(new Point(row, column), string);
maxRow = Math.max(row, maxRow);
maxColumn = Math.max(column, maxColumn);
}
public String[][] toArray() {
String[][] result = new String[maxRow + 1][maxColumn + 1];
for (int row = 0; row <= maxRow; ++row)
for (int column = 0; column <= maxColumn; ++column) {
Point p = new Point(row, column);
result[row][column] = map.containsKey(p) ? map.get(p) : "";
}
return result;
}
}
示例代码
public static void main(String[] args) throws IOException {
ArrayStructure s = new ArrayStructure();
s.add(0, 0, "1");
s.add(1, 1, "4");
String[][] data = s.toArray();
for (int i = 0; i < data.length; ++i) {
for (int j = 0; j < data[i].length; ++j)
System.out.print(data[i][j] + " ");
System.out.println();
}
}
输出
1
4