2010-08-10 3 views
0

Я хочу читать в 1-м, 4-м, 7-м и т. Д. (Каждые 3 строки) из текстового файла, но не уверен, как это сделать, поскольку nextLine() читает все последовательно. Спасибо вам за ваши предложения?Чтение определенных строк из текстовых файлов

Scanner in2 = new Scanner(new File("url.txt")); 

while (in2.hasNextLine()) { 
    // Need some condition here 
    String filesURL = in2.nextLine(); 
} 

ответ

2

Если вы не уже есть индекс, который говорит вам смещение файла, где каждая строка начинается в файле, то единственный способ найти каждую строку, чтобы прочитать файл последовательно.

Вы уверены, что цель не только для/выхода/1-й, 4-й, 7-й и т. Д. Линий? Вы можете читать все строки последовательно, но оставлять только те, которые вас интересуют.

8

Используйте счетчик и оператор % (модуль) так, чтобы считывалась только каждая третья строка.

Scanner in = new Scanner(new File("url.txt")); 

int i = 1; 

while (in.hasNextLine()) { 
    // Read the line first 
    String filesURL = in.nextLine(); 

    /* 
    * 1 divided by 3 gives a remainder of 1 
    * 2 divided by 3 gives a remainder of 2 
    * 3 divided by 3 gives a remainder of 0 
    * 4 divided by 3 gives a remainder of 1 
    * and so on... 
    * 
    * i++ here just ensures i goes up by 1 every time this chunk of code runs. 
    */ 
    if (i++ % 3 == 1) { 
     // On every third line, do stuff; here I just print it 
     System.out.println(filesURL); 
    } 
} 
+2

+1 хороший, но способ разрушить образование. Ну ладно, по крайней мере, мне все равно будет выплачиваться ... – karim79

+1

@ karim79: Я прокомментировал свой код, чтобы объяснить, как работает оператор, если это помогает ... – BoltClock

+1

Err, который будет читать каждую строку только через третий раз и обрабатывать каждую строку один раз (если обработка находится в 'if') или обрабатывать каждую строку три раза (если она находится вне' if'). – paxdiablo

5

Вы чтения каждая строка, но только процесс каждый третий один:

int lineNo = 0; 
while (in2.hasNextLine()) { 
    String filesURL = in2.nextLine(); 
    if (lineNo == 0) 
     processLine (filesURL); 
    lineNo = (lineNo + 1) % 3; 
} 

lineNo = (lineNo + 1) % 3 будет цикл lineNo через 0,1,2,0,1,2,0,1,2,... и линии будут обрабатываться только тогда, когда это ноль (так строк 1, 4, 7, ...).

+0

+1 для определения ошибки в моем ответе и предоставления правильного кода :) – BoltClock

Смежные вопросы