В Array list необходимо переписать содержимое

Имеется массив в ячейке которого записано значения в виде:

ArrayList list= new Array list();
String str="CQUAD4         2       1       3       8       9       2270.0000"
list.add(str);

Подскажите пожалуйста способ как перезаписать значения(сдвинуть нужные значения на 1 позицию) в ячейки list например что бы при запросе list.get (0 )получилось следующие:

CQUAD4         2       1       8       9       2       3270.0000

Длина ячейки 64. Массив сделан потому что таких строчек будет много. Я их считываю с txt файла. В примере я написал одну так как не имеет разницы их количество. В каждой ячейки мне нужно будет сделать манипуляции с перебором. В строке записана форма записи где под каждый столбец выделяется место в размере 8 символов. Начиная с 4 столбца по 7 нужно их переписать( 4 станет 5, 5-6,6-7,7-1)


Ответы (1 шт):

Автор решения: Nowhere Man
  1. Разбить строку на колонки по 8 символов можно при помощи String::split с регуляркой вида (?<=\G.{8}), в результате получится массив строк.
  2. Преобразовать массив в список строк следует при помощи Arrays.asList, так как полученный список будет использовать исходный массив и все изменения в списке (подсписки / сдвиги) будут отображаться и в массиве.
  3. Поскольку необходимо сдвигать данные в колонках с индексами от 3 до 7 (индексы массивов/списков начинаются с 0), следует получить подсписок при помощи List::subList
  4. Сдвинуть элементы подсписка следует при помощи Collections::rotate, для сдвига влево на 1 следует использовать расстояние -1
  5. Можно убедиться в том, что данные изменения отобразились на списке/массиве.
  6. Для "восстановления" строки из изменённого массива можно воcпользоваться методом String.join

Образец кода в виде функции:

public static String transform(String str) {
    // 1) получаем массив колонок шириной 8 символов
    String[] arr = str.split("(?<=\\G.{8})");
    // 2) конвертируем массив в список
    List<String> list = Arrays.asList(arr);
    // 3) берём подсписок нужных колонок
    List<String> sub = list.subList(3, 7);
    // 4) и сдвигаем его на 1 колонку влево
    Collections.rotate(sub, -1);
    // 5) вывод массива, чтобы убедиться в корректности сдвига (закомментирован)
    // System.out.println(Arrays.toString(arr));
    // 6) возврат строки
    return String.join("", arr);
}
// ...
// тест
String str = "CQUAD4         1       2       3       4       5       6270.0000";
System.out.println("было:  " + str);
System.out.println("стало: " + transform(str));
было:  CQUAD4         1       2       3       4       5       6270.0000
стало: CQUAD4         1       2       4       5       6       3270.0000
→ Ссылка