使用BufferedReader中read()方法返回的字符

14

如何将BufferedReaderread()返回的整数转换为实际字符值并将其附加到字符串中?read()返回表示所读取字符的整数。但是当我这样做时,它不会将实际字符附加到字符串中,而是将整数表示本身附加到字符串中。

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
}

我应该怎么做才能获得实际读取的数据?

3个回答

28

只需要将c强制转换成char就可以了。

另外,在循环中不要使用+=来连接String。这样的复杂度是O(n^2),而不是预期的O(n)。应该使用StringBuilder或者StringBuffer代替。

int c;
StringBuilder response= new StringBuilder();

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

1
@JoeBlow 感谢您的友善评论。关于您的编辑,我认为关闭阅读器是创建阅读器的人的责任。因为我们看不到阅读器的创建过程,在这里关闭它是不合适的,也超出了回答的范围。 - ILMTitan

5
您也可以将它读入一个char缓冲区中。
char[] buff = new char[1024];
int read;
StringBuilder response= new StringBuilder();
while((read = bufferedReader.read(buff)) != -1) {

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

这将比逐个字符读取更高效。


4

首先将其转换为char类型:

response += (char) c;

此外(与您的问题无关),在该特定示例中,应使用 StringBuilder 而不是 String。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接