如何将StringReader转换为字符串



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

String string = reader.toString();

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

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

我得到的只是一个指针值,像这样:

java.io.StringReader@2c552c55

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

import org.apache.commons.io.IOUtils;
String string = IOUtils.toString(reader);

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

如果您不喜欢使用外部库:

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

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

或者使用谷歌Guava库中的CharStreams

CharStreams.toString(stringReader);

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

您可以使用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();
      }
   }
}

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

另一个本机(Java 8+)解决方案可以将StringReader对象传递给BufferedReader,并通过以下行进行流式传输:

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

您打印的是实际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();
    }

根据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());

相关内容

  • 没有找到相关文章

最新更新