如何将StringReader转换为String?
我正在尝试将我的StringReader
转换回常规String
,如下所示:
String string = reader.toString();
但是当我尝试读出这个字符串时,像这样:
System.out.println("string: "+string);
我得到的只是一个指针值,如下所示:
java.io.StringReader@2c552c55
我在读回字符串时做错了吗?
StringReader
的toString
方法不返回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); }