В 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
→ Ссылка
- Разбить строку на колонки по 8 символов можно при помощи
String::splitс регуляркой вида(?<=\G.{8}), в результате получится массив строк. - Преобразовать массив в список строк следует при помощи
Arrays.asList, так как полученный список будет использовать исходный массив и все изменения в списке (подсписки / сдвиги) будут отображаться и в массиве. - Поскольку необходимо сдвигать данные в колонках с индексами от 3 до 7 (индексы массивов/списков начинаются с 0), следует получить подсписок при помощи
List::subList - Сдвинуть элементы подсписка следует при помощи
Collections::rotate, для сдвига влево на 1 следует использовать расстояние-1 - Можно убедиться в том, что данные изменения отобразились на списке/массиве.
- Для "восстановления" строки из изменённого массива можно во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