Как напечатать двумерный массив строк как String
Я знаю, как сделать метод toString
для одномерных массивов строк, но как мне напечатать двумерный массив? С 1D я делаю это так:
public String toString() {
StringBuffer result = new StringBuffer();
res = this.magnitude;
String separator = "";
if (res.length > 0) {
result.append(res[0]);
for (int i=1; i<res.length; i++) {
result.append(separator);
result.append(res[i]);
}
}
return result.toString();
Как я могу распечатать 2D-массив?
Ответы
Ответ 1
Вы просто повторяете два раза по элементам:
StringBuffer results = new StringBuffer();
String separator = ","
float[][] values = new float[50][50];
// init values
for (int i = 0; i < values.length; ++i)
{
result.append('[');
for (int j = 0; j < values[i].length; ++j)
if (j > 0)
result.append(values[i][j]);
else
result.append(values[i][j]).append(separator);
result.append(']');
}
ВАЖНО: StringBuffer
также полезны, потому что вы можете цеплять операции, например: buffer.append(..).append(..).append(..)
, так как он возвращает ссылку на себя! Используйте синтаксический сахар, когда он доступен.
ВАЖНО2:, так как в этом случае вы планируете добавить много вещей в StringBuffer
, чтобы оценить способность избегать выделения и перемещения массива много раз во время добавления, вы можете сделать это, вычисляя размер многомерного массива, умноженный на среднюю длину символа элемента, который вы планируете добавить.
Ответ 2
Класс Arrays определяет несколько полезных методов
- Массивы toString - это не работает для вложенных массивов
- Массивы deepToString - что делает именно то, что вы хотите
String[][] aastr = {{"hello", "world"},{"Goodbye", "planet"}};
System.out.println(Arrays.deepToString(aastr));
дает
[[hello, world], [Goodbye, planet]]
Ответ 3
public static <T> String to2DString(T[][] x) {
final String vSep = "\n";
final String hSep = ", ";
final StringBuilder sb = new StringBuilder();
if(x != null)
for(int i = 0; i < x.length; i++) {
final T[] a = x[i];
if(i > 0) {
sb.append(vSep);
}
if(a != null)
for(int j = 0; j < a.length; j++) {
final T b = a[j];
if(j > 0) {
sb.append(hSep);
}
sb.append(b);
}
}
return sb.toString();
}
Ответ 4
Две петли for
:
for (int i=1; i<res.length; i++) {
for (int j=1; j<res[i].length; j++) {
result.append(separator);
result.append(res[i][j]);
}
}
Ответ 5
public static void main(String[] args) {
String array [] [] = {
{"*","*", "*", "*", "*", "*"},
{"*"},
{"*"},
{"*"},
{"*","*", "*", "*", "*", "*"},
{"*"},
{"*"},
{"*"},
{"*"},
{"*"}};
for (int row=0; row<array.length;row++) {
for (int column = 0; column < array[row].length; column++) {
System.out.print(array[row][column]);
}
System.out.println();
}
}