Frage

Ich habe eine Textdatei, in jeder ungeraden Zeile eine ganze Zahl hält (String OFCOURSE seit seinem in einer Textdatei), auch Linien eine Zeit. Ich möchte nur die Zahlen lesen, damit die ungerade Anzahl von Zeilen aus einer Textdatei. Wie kann ich das tun?

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

Ab jetzt wird alles liest die (ungerade und gerade) Zeilen, bis es nicht mehr aus lesen (null)

Da meine gerade Anzahl Zeilen ist ein Zeitstempel wie 13:44:23 so kann ich so etwas wie

  

if (lesen == null oder wenn Lese ein enthält   Zeit oder Semikolon) {} else {   SOP (Lese);}

War es hilfreich?

Lösung

Sicher ein einfaches in.readLine () setzt kurz vor dem Abschluss Ihrer for-Schleife wird dieses aussortieren?

das heißt:.

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

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

Andere Tipps

Lesen Sie in allen Zeilen, und jede andere ignorieren.

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

oder rufen Sie readLine() zweimal pro Schleife, das zweite Mal zu ignorieren, und zu vermeiden, die einen Zähler (sicher, da alle Anrufe readline return null nach End-of-Strom erreicht ist).

Bearbeiten Wenn Effizienz absolut Schlüssel ist, und die Datumslinien hatten ein Format mit fester Länge, könnten Sie skip(15) oder ähnliches verwenden, um effizient die Zeilen überspringen Sie etwa nicht.

Sie haben bereits ein Linecounter haben, wenn Sie also jede zweite Zeile verwenden möchten, verwenden Sie die Modulo-Check

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

Führen Sie einfach so etwas wie dies jedes Mal, wenn Sie in einer Zeile zu lesen:

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
}

Das macht den Code dynamisch. Wenn die Textdatei ändert, und ganze Zahlen auf verschiedenen nummerierten Linien erscheinen stattdessen kann der Code gleich bleiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top