我有一个函数,它接受某种类型的对象,以及PrintStream
要打印的对象,并输出该对象的表示。如何在字符串中捕获此函数的输出?具体来说,我想在toString
方法中使用它。
问问题
91468 次
6 回答
205
使用 aByteArrayOutputStream
作为缓冲区:
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
final String utf8 = StandardCharsets.UTF_8.name();
try (PrintStream ps = new PrintStream(baos, true, utf8)) {
yourFunction(object, ps);
}
String data = baos.toString(utf8);
于 2009-11-19T03:21:59.823 回答
35
您可以使用传递给构造函数的 ByteArrayOutputStream 构造一个 PrintStream,稍后您可以使用它来获取写入 PrintStream 的文本。
ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");
于 2009-11-19T03:23:05.347 回答
9
为什么不将 StringWriter 与 PrintWriter 一起使用?
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
out.println("Hello World!");
String output = writer.toString();
于 2011-10-21T17:31:08.907 回答
7
先前答案的统一,此答案适用于 Java 1.7 及更高版本。此外,我添加了关闭 Streams 的代码。
final Charset charset = StandardCharsets.UTF_8;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, charset.name());
yourFunction(object, ps);
String content = new String(baos.toByteArray(), charset);
ps.close();
baos.close();
于 2017-09-19T22:03:03.507 回答
2
也许这个问题可以帮助你: Get an OutputStream into a String
子类 OutputStream 并将其包装在 PrintStream
于 2009-11-19T03:24:05.903 回答
-4
定义并初始化一个名为 inSS 的 Scanner 变量,该变量使用字符串变量 myStrLine 创建一个输入字符串流。
Ans: Scanner inSS = new Scanner(myStrLine);
于 2017-04-02T19:06:33.830 回答