Как напечатать двумерный массив строк как 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();
    }
}