Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Разбить файл на блоки


Автор: MasterOfCode 8.2.2011, 08:44
День добрый.
Подскажите пути решения проблемы:
Есть файл:
Код

~abcd
any text here
any text here
~efgh
any text here
any text here
any text here
~ijk
any text here
any text here

Как мне считать данный файл разбив его на блоки (String[]) через раздилитель "~"?

Автор: techmax 8.2.2011, 09:41
прочитали файл
Код

 readStream = new BufferedReader(new InputStreamReader(new java.io.FileInputStream(file)));
String s = "";
 while ((inputStr = readStream.readLine()) != null){
s+=inputStr;
}

разделили
Код

s.split("~")


Автор: Kircul 8.2.2011, 18:22
techmax, никогда больше так не делайте. Если необходимо проводить конкатенацию строк неопределенное кол-во раз используйте StringBuilder или StringBuffer.

Автор: MasterOfCode 8.2.2011, 19:58
 Дак как все таки правильно?

Автор: _Y_ 8.2.2011, 21:27
Если файл очень большой и поэтому обработка его предполагается по мере чтения (поблочно), я бы использовал такой алгоритм в каждом цикле чтения:

1. inputStr.split("~", 2);
2. если размер полученного массива равен 1, добавляем строку в буфер (StringBuffer) и идем читать следующую строку. Если 2 - продолжаем (идем к п.3).
3. добавляем первый член массива в буфер.
4. Обрабатываем содержимое буфера как надлежит.
5. Опустошаем буфер. 
6. Присваиваем inputStr значение второго члена массива
7. Возвращаемся к п.1 не читая следующую строку.

По окончании чтения (по достижении конца фаила) обрабатываем содержимое буфера как надлежит.





Автор: techmax 9.2.2011, 04:29
Как правильно зависит от твоей задачи.(размера выделенной памяти и размера файла).
1. Если это небольшая задача то хватит и моего примера. дальше можно и не заморачиваться.
   единственное можешь поменять конкатенацию String' гов на StringBuilder( для небольшого числа сложений разница не принципиальна)
2. Если же размеры имеют значение то вариациями алгоритма приведенного _Y_. (если использовать indexOf и substring вроде должно работать быстрее)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)