我有这种形式的网格:
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
我将以字符串形式收到它:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这只是5乘5网格的一个例子。但实际上,我有20列15行。网格中的值不仅仅为零。
但是,我想知道如何按行读取这样的数字串。我依赖这个字符串来使用onDraw方法在android的GUI中检查网格颜色。我的方法逐行读取的位置。
任何帮助表示赞赏!
答案 0 :(得分:2)
Haven没有测试过它。但我认为你需要这样的东西。拆分输入,每20个数字创建一个新的array
String input = //put the input here
String[] inputSplitted = input.split(" "); //create array that holds all values.
int colSize = 20;
for(int i = 0; i < inputSplitted.length; i ++){
String[] row = new String[20]; //create array to hold a row
for(int j = i; j < i + row.length; j++)
row[j-i] = inputSplitted[j]; //add ekements the row
// do something with row
i += row.length; //increase i by row length so you add row.length + 1 index to the next row
}
请注意,现在每一行都是String[]
。如果您想将数组的元素用作int
,则必须执行Integer.parseInt(row[i]);
等。
希望这有帮助。
如果您想将值存储在2d array
中,请在下面发表评论,我会更新我的答案。
答案 1 :(得分:0)
感谢您给我机会自学和思考。当然,非常感谢@xgeorgekx提供的代码,这些代码使用您的代码作为参考,让我自己解决自己的问题。我这样做了,我知道它没有完全优化。我欢迎任何建议!
首先,我摆脱了字符串中的所有空格。然后使用numColumns作为15和numRows作为20,我使用2个循环并存储解析为int的字符串的值,因为我需要数组的元素作为cellType以便设置颜色。
String spaceFilter = map.replaceAll(" ", "");
for (int i = 0; i < numColumns; i++) {
for (int j = 0; j < numRows; j++) {
if (spaceFilter.length() != 0) {
cellType[i][j] = Integer.parseInt(spaceFilter.substring(0,1));
spaceFilter = spaceFilter.substring(1);
}
}
}