2012-04-29 10 views
5

Desde el javadoclectura en BufferedReader

public String readLine() 
      throws IOException 

Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed. 

He siguiente tipo de texto:

Now the earth was formless and empty. Darkness was on the surface 
of the deep. God's Spirit was hovering over the surface 
of the waters. 

estoy leyendo líneas como:

while(buffer.readline() != null){ 
     } 

Pero, el problema es que está considerando una línea para cadena hasta antes de nueva línea. Pero me gustaría considerar la línea cuando la cadena termina con .. ¿Cómo lo haría?

Respuesta

5

se puede leer un carácter a la vez, y copiar los datos a un StringBuilder

Reader reader = ...; 
StringBuilder sb = new StringBuilder(); 
int ch; 
while((ch = reader.read()) >= 0) { 
    if(ch == '.') break; 
    sb.append((char) ch); 
} 
4
  • Utilice un java.util.Scanner en lugar de un lector de buffer, y establecer el delimitador para "\\." con Scanner.useDelimiter(). (pero tenga en cuenta que el delimitador se consume, por lo que hay que añadir de nuevo!)
  • o leer la cadena en bruto, que se dividió en cada .
4

Se podría dividir todo el texto de cada .:

String text = "Your test."; 
String[] lines = text.split("\\."); 

Después de dividir el texto que consiguen una serie de líneas. También puede usar una expresión regular si desea tener más control, p. para dividir el texto también por : o ;. Solo busca en google.

PS .: Tal vez usted tiene que quitar los caracteres de nueva línea en primer lugar con algo como:

text = text.replaceAll("\n", ""); 
7

Puede utilizar un Scanner y establecer su propio delimitador utilizando useDelimiter(Pattern).

Tenga en cuenta que el delimitador de entrada es una regex, por lo que tendrá que proporcionar la expresión regular \. (que necesita para romper el significado especial del carácter . en expresiones regulares)

Cuestiones relacionadas