Как читать нечетное количество строк из текстового файла с помощью Java?
-
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
}
Это делает код динамикой. Если текстовые файлы изменяются, и целые числа отображаются на разных пронумерованных строках, ваш код может оставаться прежним.