我有一个包含此信息的属性文件:
info.row1=1100011
info.row2=1000001
info.row3=0001000
info.row4=0011100
info.row5=0001000
info.row6=1000001
info.row7=1100011
我也有这样的矩阵
info = new int[7][7];
我想在矩阵的一部分中保存每个int数字,如下所示:
---------------
|1|1|0|0|0|1|1|
---------------
|1|0|0|0|0|0|1|
---------------
|0|0|0|1|0|0|0|
---------------
|0|0|1|1|1|0|0|
---------------
|0|0|0|1|0|0|0|
---------------
|1|0|0|0|0|0|1|
---------------
|1|1|0|0|0|1|1|
---------------
我该怎么做?我有这个代码,直到现在都运行良好,我只需要将该信息保存在矩阵中。
private void startInfo(Properties data)
{
info = new int[7][7];
for(int i = 0; i < 7; i++)
{
for(int j = 0; j < 7; j++)
{
String estate = data.getProperty( "info.row" +i );
info[i][j] = ???????????;
}
}
}
答案 0 :(得分:2)
每行读取一次数据并使用String.charAt
函数映射到整数:
private void startInfo(Properties data) {
info = new int[7][7];
for (int i = 0; i < 7; i++) {
// only read once per row
String estate = data.getProperty( "info.row" +i );
for (int j = 0; j < 7; j++) {
// map '0' to 0, anything else to '1'
info[i][j] = estate.charAt(j) == '0' ? 0 : 1;
}
}
}
答案 1 :(得分:0)
您可以使用Character.digit(char, int)
执行int
转换。像
info = new int[7][7];
for (int i = 0; i < info.length; i++) {
String estate = data.getProperty(String.format("info.row%d", i + 1));
char[] line = estate.toCharArray();
for (int j = 0; j < line.length; j++) {
info[i][j] = Character.digit(line[j], 10);
}
}
答案 2 :(得分:0)
以下是使用RegExs和循环
的解决方案Matcher m = Pattern.compile("=\\d*").matcher("info.row1=1100011 info.row2=1000001 info.row3=0001000 info.row4=0011100 info.row5=0001000 info.row6=1000001 <info.row7=1100011");
int[][] info = new int[7][7];
int counter = 0;
while (m.find()){
String s = m.group(0).substring(1);
for (int i = 0 ; i < s.length() ; i++){
info[counter][i] = s.charAt(i);
}
counter++;
}
答案 3 :(得分:0)
感谢大家的回答,你们都解决了我的疑问。虽然,没有人意识到(包括我)是我的属性数据从1开始,例如第一行是“info.row1”,所以当我们在0中开始第一个“for”时,我们正在搜索没有的东西存在,并导致nullpointerexception错误。因此解决方案是向i添加1并解决问题。致谢