Как прочитать нечетное количество строк из текстового файла с помощью Java? - PullRequest
1 голос
/ 01 ноября 2010

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

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(); 
} 
}

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

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

if (read == null ИЛИ, если read включает в себя время или точка с запятой) {} else { СОП (чтение);}

Ответы [ 4 ]

4 голосов
/ 01 ноября 2010

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

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

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

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

2 голосов
/ 01 ноября 2010

Разумеется, простое значение in.readLine () непосредственно перед закрытием вашего for -цикла разрешит это?

т.е.

0 голосов
/ 01 ноября 2010

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

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
}

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

0 голосов
/ 01 ноября 2010

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

if((linenum % 2) == 1){
     System.out.println(read);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...