java 在java中用动态大小初始化二维字符串数组
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27939594/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
initialize two dimensional string array with dynamic size in java
提问by S Singh
I have unknown number of records and I need to put all that records in string two dimensional array.
我有未知数量的记录,我需要将所有记录放入字符串二维数组中。
I don't know the number of records and due to this, don't know number of rows and columns which is required for string 2d array initialization.
我不知道记录数,因此,不知道字符串二维数组初始化所需的行数和列数。
Currently I am using as below:
目前我使用如下:
String[][] data = new String[100][100];
Here I hard coded number of rows and columns but need something dynamic size allowable in string 2d array. Any suggestion pls!
在这里,我硬编码了行数和列数,但需要字符串二维数组中允许的动态大小。任何建议请!
Rgrds
规则
回答by Niels Billen
You can use the following class which stores your data in a HashMap
and is able to convert it to a two dimensional string array.
您可以使用以下类将数据存储在 a 中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;
}
}
Example code
示例代码
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();
}
}
Output
输出
1
4
回答by Niels Billen
You can temporarely store them in a List<String[]>
and use List#toArray(String[])
to convert it to a two dimensional array.
您可以将它们临时存储在 a 中List<String[]>
并用于List#toArray(String[])
将其转换为二维数组。
Example
例子
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
数据.txt
1 2 3 4 5
2 5 3
2 5 5 8
Output
输出
1 2 3 4 5
2 5 3
2 5 5 8
回答by Mena
You can simply initialize with a literal, empty two-dimensional array:
您可以简单地使用文字空二维数组进行初始化:
String[][] data = new String[][]{{}}
回答by Giulio Biagini
This should work:
这应该有效:
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";
}
In this example you know the matrix dimension runtime, specifying it manually via the console.
在此示例中,您知道矩阵维度运行时,通过控制台手动指定它。