Как читать нечетное количество строк из текстового файла с помощью Java?

StackOverflow https://stackoverflow.com/questions/4072580

  •  28-09-2019
  •  | 
  •  

Вопрос

У меня есть текстовый файл, в котором каждая нечетная линия содержит целочисленное число (строку, с момента его в текстовом файле), даже линии имеют время. Я хочу прочитать только цифры, поэтому нечетное количество строк из текстового файла. Как я могу это сделать?

import java.io.*; 

public class File { 

BufferedReader in; 
String read; 
int linenum =12;


public File(){ 
try { 
in = new BufferedReader(new FileReader("MAP_allData.txt")); 

for (linenum=0; linenum<20; linenum++){

read = in.readLine();
if(read==null){} 
else{
System.out.println(read);  }
}
in.close(); 
}catch(IOException e){ System.out.println("There was a problem:" + e); 

} 
} 

public static void main(String[] args){ 
File File = new File(); 
} 
}

На данный момент он прочитает все (нечетные и четные) строки, пока больше не будет читать из (NULL)

Поскольку мои даже номера строки - это тарка времени, как 13:44:23 так что я могу сделать что-то вроде

Если (прочитайте == NULL или если чтение включает в себя время или полутолье) {} else {SOP (чтение);}

Это было полезно?

Решение

Наверняка положить простой in.readLine () как раз перед закрытым for-лоп разоблатся этому?

IE:

for (linenum=0; linenum<20; linenum++) {

    read = in.readLine();
    if(read==null){} 
    else{
        System.out.println(read);  
    }
    in.readLine ();
}

Другие советы

Читайте во всех линиях и игнорируйте все остальные.

int lineNum = 0;
String line = null;
while ( (line = reader.readLine() ) != null ) {
   lineNum++;
 if ( lineNum % 2 == 0 ) continue;
   //else deal with it
}

Или просто звонить readLine() Дважды на петлю, игнорируя второй раз и избегайте встречи (безопасны, так как все вызовы на return return return null после достижения конца потока).

Редактировать Если эффективность абсолютно ключ, и линии даты имели формат фиксированной длины, вы можете использовать skip(15) или аналогично эффективно пропустить линии, о которых вы не заботитесь.

У вас уже есть Linecounter, поэтому, если вы хотите использовать каждую другую строку, используйте проверку модуля

if((linenum % 2) == 1){
     System.out.println(read);
}

Просто выполните что-то вроде этого каждый раз, когда вы читаете в строке:

String str = read;
char[] all = str.toCharArray();
bool isInt = true;
for(int i = 0; i < all.length;i++) {
    if(!Character.isDigit(all[i])) {
        isInt = false;
    }
    else {
        isInt = true;
    }
}
if isInt {
    //INTEGER LINE
} else {
    //DO SOMETHING WITH THE TIME
}

Это делает код динамикой. Если текстовые файлы изменяются, и целые числа отображаются на разных пронумерованных строках, ваш код может оставаться прежним.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top