Domanda

Ho un file di testo in cui ogni riga dispari detiene un numero intero (String naturalmente dalla sua in un file di testo), le linee ha anche un tempo. Ho solo voglia di leggere i numeri, quindi il numero dispari di linee da un file di testo. Come faccio a farlo?

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

Come di adesso, leggerà tutte le linee finché non c'è più leggere da (anche dispari e) (null)

Dal momento che le mie battute numero pari è un timestamp come 13:44:23 così posso fare qualcosa di simile

  

if (leggi == null o se lettura comprende un   tempo o il punto e virgola) {} else {   SOP (lettura);}

È stato utile?

Soluzione

Di certo mettere un semplice in.readLine () poco prima della fine della vostra for-loop risolvere la questione?

cioè:.

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

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

Altri suggerimenti

Leggi in tutte le linee, e di ignorare ogni altro.

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

O semplicemente chiamata readLine() due volte per ciclo, ignorando la seconda volta, e evitare di avere un contatore (sicuro poiché tutte le chiamate alla readLine ritorno nullo dopo la fine-di-flusso è stato raggiunto).

Modifica Se l'efficienza è assolutamente fondamentale e le linee di data aveva un formato di lunghezza fissa, è possibile utilizzare skip(15) o simile per saltare in modo efficiente le linee che non si preoccupano.

È già un LineCounter, quindi se si desidera utilizzare ogni altra linea, utilizzare il controllo di modulo

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

Proprio eseguire qualcosa di simile ogni volta che si legge in una riga:

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
}

Questo rende il codice dinamico. Se le modifiche file di testo e numeri interi appaiono su diverse linee numerate, invece, il codice può rimanere lo stesso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top