2012-04-04 18 views
13

Attualmente sto imparando Java e ho affrontato questo problema dove voglio caricare un file che consiste in un numero enorme di righe (sto leggendo il file riga per riga) e la cosa che voglio fare è saltare alcune righe (pseudo -codice).Come saltare determinate righe dal file di testo in java?

the line thats starts with (specific word such as "ABC") 

Ho provato ad utilizzare

if(line.startwith("abc")) 

Ma che non ha funzionato. Non sono sicuro se sto facendo male, è per questo che io sono qui per chiedere un aiuto, sotto parte della funzione di carico:

public String loadfile(.........){ 

//here goes the variables 

try { 

     File data= new File(dataFile); 
     if (data.exists()) { 
      br = new BufferedReader(new FileReader(dataFile)); 
      while ((thisLine = br.readLine()) != null) {       
       if (thisLine.length() > 0) { 
        tmpLine = thisLine.toString(); 
        tmpLine2 = tmpLine.split(......); 
        [...] 
+0

+1. Non sono sicuro del motivo per cui questo è stato rifiutato, ma riportandolo a 0. – Neil

+0

-1 niente a che fare con i servlet java-ee o jsp e una copia di un post già cancellato –

+2

+1 non sicuro di aver votato. se ci sono tag sbagliati, basta correggerli ... – devsnd

risposta

9

Prova

if (line.toUpperCase().startsWith(­"ABC")){ 
    //skip line 
} else { 
    //do something 
} 

Questa volontà converte il line a tutti i caratteri in alto usando la funzione toUpperCase() e controllerà se la stringa inizia con ABC.

E se è true allora non farà nulla (salta la linea) e andrà nella parte else.

È anche possibile utilizzare startsWithIgnoreCase che è una funzione fornita dallo Apache Commons. Prende i due argomenti di stringa.

public static boolean startsWithIgnoreCase(String str, 
              String prefix) 

Questa funzione restituisce booleano. E controlla se una stringa inizia con un prefisso specificato.

Restituisce vero se la stringa inizia con il prefisso, senza distinzione tra maiuscole e minuscole.

+0

Questo. non è sicuro se ci ha appena dato uno psuedocode veloce o era in realtà quello che stava facendo, ma "startwith" non è lo stesso di "startsWith" e "abc" non è lo stesso di "ABC" – Nicholas

2

Se il caso non è importante provare a utilizzare il StringUtils.startsWithIgnoreCase(String str, String prefix) di Apache Commons

This function return boolean. 

See javadoc here

Usage:

if (StringUtils.startsWithIgnoreCase(­line, "abc")){ 
    //skip line 
} else { 
    //do something 
} 
+0

Sembra eccessivo per l'uno -liner 'pubblicato da vikiii. –

+1

Molto vero. Penso che sia importante che i programmatori Java principianti imparino la libreria Apache Commons il prima possibile, in modo che non riscrivano l'utilità comune. –

+0

Avendo fatto esattamente questo in alcune occasioni, ora capisco il tuo punto. –

1

Se si dispone di grandi dimensioni di un file di input, è il codice creerà a OutOfMemoryError. non c'è niente che puoi fare contro di esso senza modificare il codice (aggiungendo più memoria fallirà, se il file si ingrandirà).

I beleave memorizzare le righe selezionate in memoria. Se il file ottiene lager (2 GB circa) avrai 4 GB in memoria. (Il vecchio valore di String e quello nuovo).

Devi risolvere i problemi con gli stream.

Creare un FileOutpuStream e scrivere la linea selezionata in quel flusso.

Il metodo deve essere modificato. Per un grande ingresso yo non può restituire una stringa:

public String loadfile(...){ 

è possibile restituire un Stream o di un file.

public MyDeletingLineBufferedReader loadFile(...) 
0

è possibile utilizzare:

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
    String lineString; 
    try{ 
    while((lineString = br.readLine()) != null) { 
     if (lineString.toUpperCase().startsWith(­"abc")){ 
      //skip 
      } else { 
      //do something 
      } 
     } 
    } 

o metodo

static boolean startsWithIgnoreCase(String str, String prefix) in org.apache.commons.lang.StringUtils come qui di seguito.

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
     String lineString; 
     try{ 
      while((lineString = br.readLine()) != null) { 
       if (StringUtils.startsWithIgnoreCase(­lineString, "abc")){ 
       //skip 
       } else { 
       //do something 
       } 
       } 
      } 
Problemi correlati