2011-01-21 13 views
15

estoy usando el siguiente código para establecer una conexión HTTP y leer datos:Retorno de carro y nueva línea con Java y readLine()

con = (HttpURLConnection) new URL("http://stream.twitter.com/1/statuses/sample.json").openConnection(); 
... 
con.connect(); 
while (line = rd.readLine()) { 
    if (line.contains("\r\n")) { 
     System.out.println("Carriage return + new line"); 
    } 
} 

Sin embargo, parece que "\ r \ n" no es parte de la cadena (line), aunque el servidor los devuelve. ¿Cómo puedo leer los datos y detectar "\ r \ n"?

Gracias,

Joel

+3

'while (line = rd.readLine())' ni siquiera se compilará. Además, ¿cuál es el tipo de 'rd' y cómo lo consigues? – aioobe

+1

Supongo que estás utilizando 'BufferedReader' con' rd', cuando lees con 'readLine()', '\ n' y' \ r' chars se recortarán del resultado, no puedes verlos si usas esto método. Debería considerar usar 'leer()'. –

Respuesta

29

Si rd es de tipo BufferedReader no hay forma de averiguar si readLine() volvieron algo que terminó con \n, \r o \r\n ... los caracteres de fin de línea se descartan y no son parte de la cadena devuelta.

Si realmente te importan estos personajes, no puedes pasar por readLine(). Por ejemplo, deberá leer los caracteres uno por uno a través del read().

+1

A él no debería importarle. Debería estar allí, pero es mucho mejor que funcione con cualquier final de línea. Por lo tanto, considerando todo lo devuelto por bufferedReader.readLine como una línea es el camino a seguir, en mi humilde opinión. – maaartinus

+33

No me gustan las preguntas/comentarios que comienzan con "no debería preocuparse por eso" ... podría, por ejemplo, estar sentado con una especificación de prueba que diga "buscar por \ r \ n usos". Es poco probable, pero el punto es este: * ¡no sabes *! – aioobe

+3

No hay nada malo con el uso de BufferedReader. Simplemente use métodos basados ​​en caracteres en lugar de readLine(). –

10

Desde el javadocs:

public String readLine() throws IOException 

leer una línea de texto. Se considera que una línea termina con uno de los avances de línea ('\ n'), un retorno de carro ('\ r') o un retorno de carro seguido inmediatamente de un salto de línea.
Devuelve:
Cadena que contiene el contenido de la línea, no incluyendo ningún carácter de terminación de línea de, o null si el final de la secuencia se ha alcanzado
Lanza:
IOException - Si un error I/O ocurre

+2

No hay nada como unos pocos segundos en la documentación de JDK. Lo cual tomaría menos tiempo que el op. –

+4

Pero eso no resuelve el problema, ¿cómo se obtiene la línea que termina caracteres en la cadena? – zehelvion

+1

@JaredBeekman Los documentos JDK son buenos, pero no incluyen todo. Por ejemplo, a partir de esta descripción no está claro si la última línea vacía (como se ve a menudo en el editor de texto) se devuelve como una cadena vacía o no se considera una línea en absoluto. – industryworker3595112

Cuestiones relacionadas