如何从二进制字符串中提取整数并将其保存在矩阵中?

时间:2015-11-14 22:30:59

标签: java

我有一个包含此信息的属性文件:

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] = ???????????;
            }
        }
    }

4 个答案:

答案 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并解决问题。致谢