Транспонирование таблицы – это переворот таблицы, при котором строки становятся столбцами, а столбцы строками. Математически аналогично транспонированию матрицы, из школьной программы.
Пригодится транспонирование таблицы может в случае, если ваша таблица не умещается на экране в горизонтальном направлении, а в вертикальном направлении экран удобно прокручивать и читать.
В данном примере таблица записана в html тегах <tr><td> в строковую переменную table, которая и передаётся в функцию transpositionTable. Теги <table> в переменной table отсутствуют.
- Создаем нужные переменные.
Разбиваем строку функцией table.split(“tr>”); на строки и пишем в массив tr, то есть в каждый элемент массива записывается одна строка из таблицы вместе с html тегами, которые мы потом отфильтруем.
Разбиваем первый элемент массива tr функцией tr[0].split(“tr>”); на столбцы и пишем в массив td, то есть в каждый элемент массива записывается один столбец из первого элемента массива tr. Это нужно, чтобы потом посчитать столбцы.
Создаём двухмерный массив tran. Первое измерение будет равно количеству строк, а второе количеству столбцов.
- Преобразуем таблицу в двухмерный массив.
Запускаем первый внешний цикл с перебором строк. Операцией tr[i].replaceAll(“<tr>”,””); удаляем из текущей строки теги <tr>. Функцией tr[i].split(“td>”); разбиваем текущую строку и записываем результат в массив td.
Запускаем внутренний цикл с перебором полей строки. Операцией td[j].replaceAll(“<td>”,””); удаляем из текущего поля теги <td>. Записываем каждое поле в двухмерный массив tran [i] [j].
После полного прохода первого внешнего цикла мы получаем перевод данных нашей таблицы в двухмерный массив. То есть представление нашей таблицы в виде массива. Данные в массиве очищены от тегов.
- Записываем перевёрнутый массив в строку
Запускаем второй внешний цикл с перебором столбцов (полей). В строку table_trans добавляем начальный тег <tr>.
Запускаем внутренний цикл с перебором строк. В строку table_trans записываем данные из массива tran [j] [i], обёрнутую в теги <td>. Обратите внимание двухмерный массив tran тут перевёрнут, благодаря чему мы и транспонируем таблицу.
Подведём итоги.
В результате функция выводит строковую переменную table_trans, которая содержит перевёрнутую (транспонированную) таблицу.
В первом внешнем цикле мы преобразовали таблицу записанную в строку в двухмерный массив. Во втором внешнем цикле мы записали перевернутый массив в строку.
// Транспонирование таблицы,
// записанной в строку в HTML виде
public static String transpositionTable(String table){
String [] tr = table.split("");
String [] td = tr[0].split("");
String [][] tran = new String [tr.length][td.length];
String table_trans="";
for(int i=0; i","");
td = tr[i].split("");
for(int j=0; j","");
tran[i][j]=td[j];
}
}
for(int i=0; i";
for(int j=0; j"+tran[j][i]+"";
}
table_trans=table_trans+"";
}
return table_trans;
}