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