2011-01-21 31 views
15

Tôi đang sử dụng đoạn mã sau để thiết lập một kết nối HTTP và đọc dữ liệu:Vận chuyển trở lại và dòng sản phẩm mới với Java và 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"); 
    } 
} 

Tuy nhiên, nó có vẻ như "\ r \ n" không phải là một phần của chuỗi (line), mặc dù máy chủ trả lại chúng. Làm thế nào tôi có thể đọc dữ liệu và phát hiện "\ r \ n"?

Cảm ơn,

Joel

+3

'while (line = rd.readLine())' thậm chí sẽ không biên dịch. Ngoài ra, loại 'rd' là gì và làm thế nào để bạn nắm giữ nó? – aioobe

+1

Tôi giả sử bạn đang sử dụng 'BufferedReader' với' rd', khi bạn đọc với các ký tự 'readLine()', '\ n' và' \ r' sẽ được cắt từ kết quả, bạn không thể nhìn thấy chúng nếu bạn sử dụng phương pháp. Bạn nên xem xét sử dụng 'read()'. –

Trả lời

29

Nếu rd là loại BufferedReader không có cách nào để tìm ra nếu readLine() trở cái gì đó kết thúc với \n, \r hay \r\n ... các end-of-line ký tự được loại bỏ và không phải là một phần của chuỗi trả về.

Nếu bạn thực sự quan tâm đến những nhân vật này, bạn không thể đi qua readLine(). Ví dụ, bạn sẽ phải đọc từng ký tự thông qua read().

+1

Anh ấy không nên quan tâm. Nên có mặt ở đó, nhưng tốt hơn là nó hoạt động với bất kỳ dòng kết thúc nào. Vì vậy, xem xét tất cả mọi thứ trở lại bởi bufferedReader.readLine như một dòng là con đường để đi, IMHO. – maaartinus

+33

Tôi không thích các câu hỏi/bình luận bắt đầu bằng "anh ấy không nên quan tâm đến điều đó" ... anh ta có thể được ngồi với một đặc điểm kỹ thuật kiểm tra mà nói "tìm kiếm \ r \ n sử dụng". Nó không chắc, nhưng vấn đề là: * bạn không biết *! – aioobe

+3

Không có gì sai khi sử dụng BufferedReader. Chỉ cần sử dụng các phương thức dựa trên ký tự thay vì readLine(). –

10

Từ javadocs:

public String readLine() throws IOException 

Đọc một dòng văn bản. Một dòng được coi là chấm dứt bởi bất kỳ một trong một dòng feed ('\ n'), một vận chuyển trở lại ('\ r'), hoặc một vận chuyển trở lại theo sau ngay lập tức bởi một linefeed.
Returns:
một chuỗi chứa nội dung của dòng, không bao gồm bất kỳ ký tự dòng chấm dứt, hoặc null nếu sự kết thúc của dòng đã đạt
Ném:
IOException - Nếu một I/O lỗi xảy ra

+2

Không có gì giống như một vài giây trong tài liệu JDK. Mà sẽ mất ít thời gian hơn op. –

+4

Nhưng điều đó không giải quyết được vấn đề, làm thế nào để bạn nhận được dòng kết thúc ký tự trong chuỗi? – zehelvion

+1

@JaredBeekman JDK tài liệu là tốt, nhưng không bao gồm tất cả mọi thứ. Ví dụ từ mô tả này, không rõ liệu dòng trống cuối cùng (như thường thấy trong trình soạn thảo văn bản) được trả về dưới dạng chuỗi trống hoặc không được coi là một dòng nào cả. – industryworker3595112

Các vấn đề liên quan