如何将StringReader转换为String?

我正在尝试将我的StringReader转换回常规String ,如下所示:

 String string = reader.toString(); 

但是当我尝试读出这个字符串时,像这样:

 System.out.println("string: "+string); 

我得到的只是一个指针值,如下所示:

 java.io.StringReader@2c552c55 

我在读回字符串时做错了吗?

StringReadertoString方法不返回StringReader内部缓冲区。

您需要从StringReader读取以获取此信息。

我建议使用接受字符数组的read重载。 批量读取比单个字符读取更快。

即。

 //use string builder to avoid unnecessary string creation. StringBuilder builder = new StringBuilder(); int charsRead = -1; char[] chars = new char[100]; do{ charsRead = reader.read(chars,0,chars.length); //if we have valid chars, append them to end of string. if(charsRead>0) builder.append(chars,0,charsRead); }while(charsRead>0); String stringReadFromReader = builder.toString(); System.out.println("String read = "+stringReadFromReader); 
 import org.apache.commons.io.IOUtils; String string = IOUtils.toString(reader); 

如果您不想使用外部库:

  Scanner scanner = new Scanner(reader).useDelimiter("\\A"); String str = scanner.hasNext() ? scanner.next() : ""; 

hasNext()检查的原因是如果reader包装了一个空白(零长度)字符串, next()将以NoSuchElementException爆炸。

或者使用Googles Guava库中的CharStreams

 CharStreams.toString(stringReader); 

reader.toString(); 将为您提供从Object类调用genericstoString()方法的结果。

您可以使用read()方法:

 int i; do { i = reader.read(); char c = (char) i; // do whatever you want with the char here... } while (i != -1); 

调用toString()方法将给出StringReader类的对象。 如果您想要它的内容,那么您需要在StringReader上调用read方法,如下所示:

 public class StringReaderExample { public static void main(String[] args) { String s = "Hello World"; // create a new StringReader StringReader sr = new StringReader(s); try { // read the first five chars for (int i = 0; i < 5; i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); } } } 

对于教程,您可以使用此链接 。

您打印出实际StringReader对象的toString() ,而不是StringReader正在读取的String的内容。

您需要使用read()和/或read(char[] cbuf, int off, int len)方法来读取String中的实际字符。

如果在StringReader对象中使用方法toString() ,则将打印对象的内存位置。 你有使用这种方法之一:

read()读取单个字符。

read(char[] cbuf, int off, int len)字符读入数组的一部分。

这是一个例子:

  String s = "Hello World"; // create a new StringReader StringReader sr = new StringReader(s); try { // read the first five chars for (int i = 0; i < s.length(); i++) { char c = (char) sr.read(); System.out.print("" + c); } // close the stream sr.close(); } catch (IOException ex) { ex.printStackTrace(); } 

另一个本机(Java 8+)解决方案可能是将StringReader对象传递给BufferedReader并通过这些行进行流式处理 :

 try (BufferedReader br = new BufferedReader(stringReader)) { br.lines().forEach(System.out::println); }