2012-04-04 13 views
13

Actualmente estoy aprendiendo Java y me he enfrentado a este problema donde quiero cargar un archivo que consiste en un gran número de líneas (estoy leyendo el archivo línea por línea) y lo que quiero hacer es omitir ciertas líneas (pseudo -código).Cómo saltear cierta línea del archivo de texto en java?

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

He intentado utilizar

if(line.startwith("abc")) 

Pero eso no funcionó. No estoy seguro de si estoy haciendo mal, es por eso que estoy aquí pidiendo una ayuda, a continuación parte de la función de carga:

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. No estoy seguro de por qué esto fue rechazado, pero volviendo a 0. – Neil

+0

-1 nada que ver con los servlets de java-ee o jsp y una copia de una publicación ya eliminada –

+2

+1 no estoy seguro de que votaron en contra. si hay etiquetas incorrectas, simplemente corrígelas ... – devsnd

Respuesta

9

Trate

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

Esta voluntad convierte la line a todos los caracteres superiores utilizando la función toUpperCase() y verificará si la cadena comienza con ABC.

Y si es true entonces no hará nada (omita la línea) y entra en la parte else.

También puede usar startsWithIgnoreCase que es una función proporcionada por Apache Commons. Toma los dos argumentos de cadena.

public static boolean startsWithIgnoreCase(String str, 
              String prefix) 

Esta función devuelve booleano. Y comprueba si una cadena comienza con un prefijo especificado.

Devuelve verdadero si la cadena comienza con el prefijo, no distingue entre mayúsculas y minúsculas.

+0

Esto. No estoy seguro de si nos acaba de dar un psuedocode rápido o si realmente era lo que estaba haciendo, pero 'startwith' no es lo mismo que' startsWith' y 'abc' no es lo mismo que' ABC' – Nicholas

2

Si el caso no es importante tratar de usar la StringUtils.startsWithIgnoreCase(String str, String prefix) de Apache Commons

This function return boolean. 

See javadoc here

Uso:

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

Parece demasiado para 'one -liner 'publicado por vikiii. –

+1

Muy cierto. Creo que es importante que los programadores novatos de Java aprendan la biblioteca de Apache Commons lo antes posible, para que no reescriban la utilidad común. –

+0

Habiendo hecho exactamente eso en algunas ocasiones, ahora veo su punto. –

1

Si usted tiene un archivo grande de entrada, el código va a crear a OutOfMemoryError. no hay nada que pueda hacer contra eso sin editar el código (agregar más memoria fallará, si el archivo se hace más grande).

Debo guardar las líneas seleccionadas en la memoria. Si el archivo obtiene lager (2 GB o menos), tendrá 4 GB de memoria. (El valor anterior de String y el nuevo).

Tienes que trabajar con las corrientes para resolver esto.

Crea un FileOutpuStream y escribe la línea seleccionada en ese flujo.

Su método debe ser cambiado. Para una entrada grande yo no puede devolver una cadena:

public String loadfile(...){ 

Puede devolver una Stream o un archivo.

public MyDeletingLineBufferedReader loadFile(...) 
0

puede utilizar:

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 método

static boolean startsWithIgnoreCase(String str, String prefix) en org.apache.commons.lang.StringUtils como a continuación.

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 
       } 
       } 
      } 
Cuestiones relacionadas