2011-10-14 5 views
10

Làm cách nào để chuyển đổi một số nguyên được trả về bởi read() trong một BufferedReader thành giá trị ký tự thực tế và sau đó nối nó vào một chuỗi? read() trả về số nguyên đại diện cho ký tự đã đọc. Làm thế nào khi tôi làm điều này, nó không gắn thêm ký tự thực tế vào String. Thay vào đó, nó gắn thêm biểu diễn số nguyên vào String.Lấy ký tự được trả về bởi read() trong BufferedReader

int c; 
String result = ""; 

while ((c = bufferedReader.read()) != -1) { 
    //Since c is an integer, how can I get the value read by incoming.read() from here? 
    response += c; //This appends the integer read from incoming.read() to the String. I wanted the character read, not the integer representation 
} 

Tôi nên làm gì để đọc dữ liệu thực tế?

Trả lời

18

Chỉ cần truyền c đến char.

Ngoài ra, không bao giờ sử dụng += trên String trong vòng lặp. Nó là O (n^2), thay vì O (n). Sử dụng StringBuilder hoặc StringBuffer để thay thế.

int c; 
StringBuilder response= new StringBuilder(); 

while ((c = bufferedReader.read()) != -1) { 
    //Since c is an integer, cast it to a char. If it isn't -1, it will be in the correct range of char. 
    response.append((char)c) ; 
} 
String result = response.toString(); 
+0

Cảm ơn câu trả lời rất rõ ràng! – Fattie

+1

@JoeBlow Cảm ơn bạn đã bình luận. Về chỉnh sửa của bạn, tôi cảm thấy việc đóng người đọc là trách nhiệm của bất kỳ ai tạo ra người đọc. Bởi vì chúng ta không thấy sự sáng tạo của người đọc, việc đóng nó không thích hợp ở đây, và vượt quá phạm vi của câu trả lời .. – ILMTitan

3

Cast nó vào một char đầu tiên:

response += (char) c; 

Ngoài (không liên quan đến câu hỏi của bạn), trong đó ví dụ cụ thể, bạn nên sử dụng một StringBuilder, không phải là một String.

5

bạn cũng có thể đọc nó vào một char buffer

char[] buff = new char[1024]; 
int read; 
StringBuilder response= new StringBuilder(); 
while((read = bufferedReader.read(buff)) != -1) { 

    response.append(buff,0,read) ; 
} 

này sẽ hiệu quả hơn so với đọc char mỗi char

+1

"c" là gì? –