Чтение из текстового файла строковых данных в двумерный массив java8
Собственно как это сделать?
Scanner использовать или reader или что? Использовать List<List<Double>> matr = new LinkedList<>(); для подсчёта строк в файле? Сильно не пинайте, но только начинаю изучать. Выручайте, ребята. Как вариант считать в одномерный, а потом переделать в двумерный массив с использованием регулярки |
То есть результатом должен быть двумерный массив чаров? Ну тогда можно считывать построчно и каждую строку разбирать на символы. Считывать построчно можно, например, вот так.
|
Цитата:
Код:
try { А вот пример строк в файле Код:
system/lost+found 0 0 770 |
Цитата:
|
Цитата:
|
blackeangel, предлагаю разбить цепочку вызовов
Код:
String[][] array = Files.lines(path) |
shisik, на бейсике было так
Код:
"^(.+) (\d+) (\d+) (\d+)(?:| (.+))$" |
Цитата:
|
Ну а если так?
Код:
split("\\s") Код:
split("\\s(?=\\d+(?:\\s\\d+)?(?:\\s\\d+)?$)") |
shisik,
Код:
split("\\s") = split(" ") А вот второй вариант попробую. |
Цитата:
|
А как теперь доработать ту регулярку так, чтобы ещё можно было захватить и такие строки
Код:
system/app/PicoTts/lib/arm/libttscompat.so 0 0 644 /system/lib/libttscompat.so Тоже с пробелами если попадуться? Просто в файле встречаются и такие строки тоже. |
Похоже, split для этого не годится. А что если так?
Код:
private static String [] parseLine(String line) { |
shisik, почему не годится?
И такой метод не разбивает - все в одну строку пишет. |
Потому что в методе split регулярка задаёт шаблон разделителя, а не всей разделяемой строки. Пока в строке после имени файла ожидались лишь цифры и пробелы, можно было проделать трюк с проверкой на наличие таких символов после пробела и таким образом не считать разделителем пробелы внутри имени файла. Если после этого пробела есть символы, не удовлетворяющие условию, например, буквы. Именно это делает часть
Код:
(?=\\d+(?:\\s\\d+)?(?:\\s\\d+)?$) Код:
\\s(?![^\\d\\s]+$) А вот написать регулярку, соответствующую всей строке целиком - это возможно и совсем несложно. Что и сделал. Но только тогда split уже не годится. |
Вот файл в котором есть варианты разновидностей.
В массиве надо получить следующее: Столбец0: путь к файлу и имя файла Столбец1-столбец3: права(0 0 0764) Столбец4: пустой и заполненный в зависимости от наличия заполнителя Столбец5:пустой |
shisik, то есть надо использовать 2 массива:в один читаем файл, во второй этот массив раскладывается по столбцам при помощи регулярки?
|
Цитата:
|
Цитата:
Код:
Stream<String> str_stream = Files.lines(path); Цитата:
0: имя файла 1 - 3: права 4 - или всё, что после прав, или ничего. Так? В общем, вот: Код:
private static String [] parseLine(String line) { |
shisik, описАлся, простите. 5й пустой. Ну да ладно, переберу массив в новый на 1 столбец больше.
Iska, рад вас видеть и в этой теме ;) |
blackeangel, просто добавьте result.add("") после цикла.
|
shisik, вообще волшебно) Спасибо огромное)
|
Цитата:
|
Цитата:
Ну почему же, советы давать ещё можете - вы же со мной все это же проделывали только на бейсике :) |
shisik, приветствую Тот код что вы давали исправно работал, пока не наткнулся на непонятный файл. С виду все так, но не ест его, падает. Переписал вот так вот, но это выглядит очень страшно. Помогите разбить на функцию и её вызов
Код:
BufferedReader reader = null; |
Время: 05:00. |
Время: 05:00.
© OSzone.net 2001-