如何将StringReader转换为String?

时间:2013-07-19 16:27:00

标签: java string tostring stringreader

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

String string = reader.toString();

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

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

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

java.io.StringReader@2c552c55

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

10 个答案:

答案 0 :(得分:24)

import org.apache.commons.io.IOUtils;

String string = IOUtils.toString(reader);

答案 1 :(得分:11)

StringReader的{​​{1}}方法不返回toString内部缓冲区。

您需要阅读StringReader才能获得此内容。

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

StringReader

答案 2 :(得分:5)

如果您不想使用外部库:

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

hasNext()检查的原因是,如果读者包装空白(零长度)字符串,则next()会以NoSuchElementException爆炸。

答案 3 :(得分:4)

或使用Googles Guava库中的CharStreams

CharStreams.toString(stringReader);

答案 4 :(得分:1)

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

您可以使用read()方法:

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

} while (i != -1);   

答案 5 :(得分: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();
      }
   }
}

对于教程,您可以使用此link

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

如果在toString()对象中使用方法StringReader,则将打印对象的内存位置。您可以使用以下方法之一:

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();
    }

答案 8 :(得分:0)

另一种本机(Java 8+)解决方案可能是通过行将StringReader对象传递到BufferedReaderstream

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

答案 9 :(得分:0)

根据https://www.tutorialspoint.com/java/io/stringwriter_tostring.htm

StringReader sr = new StringReader("hello");
StringWriter sw = new StringWriter();
sr.transferTo(sw);
System.out.println(sw.toString());