2014-10-21 3 views
0

У меня есть настольная игра определяют какСтрока Int массива [] [] - JAVA

boardArray = new int[4][4]; 

и у меня есть строка в этом формате:

String s = "[[0,0,2,0],[0,0,2,0],[0,0,0,0],[0,0,0,0]]" 

Есть ли способ поставить его в массиве int? Считают, что он должен выглядеть следующим образом

[0,0,2,0] 
[0,0,2,0] 
[0,0,0,0] 
[0,0,0,0] 
+0

применять 'String [] = нарезанную s.substring (2, s.length() - 2) .split ("\\], \\ ["); 'и затем оттуда оттуда. Вы несете ответственность за превращение подстрок в правильный тип и помещение их в нужные места. –

+0

Да, есть способ. Я бы рекомендовал использовать подстроку –

+1

. Я бы рекомендовал использовать сканер с предустановленным разделителем. –

ответ

2

Вы можете просто сделать следующее:

String s = "[[0,0,2,0],[0,0,2,0],[0,0,0,0],[0,0,0,0]]"; 

String myNums[] = s.split("[^0-9]+"); 
//Split at every non-digit 

int my_array[][] = new int[4][4]; 
for(int i = 0; i < 4; i++) { 
    for(int j = 0; j < 4; j++) { 
     my_array[i][j] = Integer.parseInt(myNums[i*4 + j + 1]); 
     //The 1 accounts for the extra "" at the beginning. 
    } 
} 

//Prints the result 
for(int i = 0; i < 4; i++) { 
    for(int j = 0; j < 4; j++) 
     System.out.print(my_array[i][j]); 
    System.out.println(); 
} 
+0

или как единый цикл 'for (int i = 0; i

+0

'.split' ... только то, о чем я думал. –

+0

отлично работает, спасибо –

0

Если вы хотите, чтобы он динамически, я написал librray: https://github.com/timaschew/MDAAJ Хорошая вещь, что это очень быстро, потому что внутренне это один одномерный массив, но предоставляет вам такой же доступ и многое другое хорошие возможности, проверка на wiki и и tests

MDDA<Integer> array = new MDDA<Integer>(4,4); 

или инициализировать существующий массив, который является одномерным "шаблон", но будут преобразованы в ваши размеры:

Integer[] template = new Integer[] {0,0,2,0, 0,0,2,0, 0,0,0,0, 0,0,0,0}; 
MDDA<Integer> array = new MDDA<Integer>(template, false, 4,4); 

//instead of array[1][2]; 
array.get(1,2); // 2