如何在将一串字符存储在数组中之前将它们放入 HashMap 中?
How to put a String of characters in a HashMap before storing them in an array?
我的程序得到的输入是一些字符串,代表矩阵中的行。我想将此矩阵的列放入 LinkedHashMap,但无需先将所有内容存储在数组中,然后构造列并将它们放入 LinkedHashMap。这个想法是应该尽快完成。
示例:
输入:
abfad
grgaa
rtwag
应该保存在 LinkedHashMap 中的字符串是:
agr
brt
fgw
aaa
dag
编辑:
我的程序现在是这样做的:
String[][] array = new String[n][m];
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
for (int i = 0; i < n; i++) {
array[i] = br.readLine().split("");
}
for (int i = 0; i < m; i++) {
String column = "";
for (int j = 0; j < n; j++) {
column += array[j][i];
}
map.put(i, column);
}
我不确定为什么这会被否决。
这是一个有趣的问题,您也许应该问得更好一些。
如果您将其视为矩阵的实时变换,是否有帮助?阅读第一行时应该发生什么?后续每一行应该发生什么?我们假设所有行都具有相同的长度,否则我们需要指定当它们不相同时会发生什么。
你自己试过之后,也许你可以看看下面。我没有用过LinkedHashMap
那里,我也用过可变的StringBuilder
。但是您可以轻松修改它以使用您选择的数据结构。
public class RealTimeTransform {
public static void main(String[] args) throws IOException {
Map<Integer, StringBuilder> columns = new HashMap<>();
readColumnsFromRows(columns, System.in);
System.out.println(columns.values());
}
private static void readColumnsFromRows(Map<Integer, StringBuilder> columns, InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
int rc = 0;
String row;
while ((row = reader.readLine()) != null) {
if (rc == 0) {
for (int i = 0; i < row.length(); i++) {
columns.put(i, new StringBuilder(10).append(row.charAt(i)));
}
} else {
for (int i = 0; i < row.length(); i++) {
columns.get(i).append(row.charAt(i));
}
}
rc += 1;
}
}
}
这会打印:
aman
plan
yess
[apy, mle, aas, nns]
根据您的规格。
我的程序得到的输入是一些字符串,代表矩阵中的行。我想将此矩阵的列放入 LinkedHashMap,但无需先将所有内容存储在数组中,然后构造列并将它们放入 LinkedHashMap。这个想法是应该尽快完成。
示例:
输入:
abfad
grgaa
rtwag
应该保存在 LinkedHashMap 中的字符串是:
agr
brt
fgw
aaa
dag
编辑:
我的程序现在是这样做的:
String[][] array = new String[n][m];
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
for (int i = 0; i < n; i++) {
array[i] = br.readLine().split("");
}
for (int i = 0; i < m; i++) {
String column = "";
for (int j = 0; j < n; j++) {
column += array[j][i];
}
map.put(i, column);
}
我不确定为什么这会被否决。
这是一个有趣的问题,您也许应该问得更好一些。
如果您将其视为矩阵的实时变换,是否有帮助?阅读第一行时应该发生什么?后续每一行应该发生什么?我们假设所有行都具有相同的长度,否则我们需要指定当它们不相同时会发生什么。
你自己试过之后,也许你可以看看下面。我没有用过LinkedHashMap
那里,我也用过可变的StringBuilder
。但是您可以轻松修改它以使用您选择的数据结构。
public class RealTimeTransform {
public static void main(String[] args) throws IOException {
Map<Integer, StringBuilder> columns = new HashMap<>();
readColumnsFromRows(columns, System.in);
System.out.println(columns.values());
}
private static void readColumnsFromRows(Map<Integer, StringBuilder> columns, InputStream in) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
int rc = 0;
String row;
while ((row = reader.readLine()) != null) {
if (rc == 0) {
for (int i = 0; i < row.length(); i++) {
columns.put(i, new StringBuilder(10).append(row.charAt(i)));
}
} else {
for (int i = 0; i < row.length(); i++) {
columns.get(i).append(row.charAt(i));
}
}
rc += 1;
}
}
}
这会打印:
aman
plan
yess
[apy, mle, aas, nns]
根据您的规格。