Как и в других ответах и комментариях, вы не можете изменить размер массива, вам придется создать новый.
Однако лучше использовать Collection , которыйавтоматически изменит свой размер.
Если вы все еще хотите сделать это с помощью нового массива, вот как вы можете это сделать: -
Я взял массив размером 3x3, вы можете использовать код для100x100
{"row0 col0", "", "row0 col2"},
{"row1 col0", "", ""},
{"", "", ""}
В этом примере, поскольку максимальное количество столбцов, используемых любой строкой, равно 2, мы можем иметь новый массив с двумя столбцами вместо 3.
Аналогично, последнийстрока практически пуста без непустых строк, у нас может быть новый массив с двумя строками вместо 3.
public static void main(String[] args) {
String[][] array1 = new String[][]{
{"row0 col0", "", "row0 col2"},
{"row1 col0", "", ""},
{"", "", ""}
};
long maxNoOfColumnsInAnyRow = Arrays.stream(array1)
.map(strings -> Arrays.stream(strings)
.filter(s -> s != null && !s.isEmpty())
.count())
.max(Long::compareTo)
.orElse((long) array1[0].length);
long noOfNonEmptyRows = Arrays.stream(array1)
.filter(strings -> Arrays.stream(strings)
.anyMatch(s -> s != null && !s.isEmpty()))
.count();
String[][] array2 = new String[(int) noOfNonEmptyRows][(int) maxNoOfColumnsInAnyRow];
int i = 0, j;
for (String[] strings : array1) {
j = 0;
for (String str : strings) {
if (str != null && !str.isEmpty()) {
array2[i][j] = str;
j++;
}
}
if (j != 0) i++;
}
System.out.println(Arrays.deepToString(array2));
}
Вывод [[row0 col0, row0 col2], [row1 col0, null]]
, который является массивом 2x2.