125

特定のタイプのオブジェクトとPrintStream印刷先のオブジェクトを受け取り、そのオブジェクトの表現を出力する関数があります。この関数の出力を文字列にキャプチャするにはどうすればよいですか?toString具体的には、メソッドのように使いたいです。

4

6 に答える 6

205

ByteArrayOutputStreamをバッファとして使用します。

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

以前の回答を統合したこの回答は、Java1.7以降で機能します。また、ストリームを閉じるためのコードを追加しました。

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

多分この質問はあなたを助けるかもしれません: 文字列にOutputStreamを取得します

OutputStreamをサブクラス化し、PrintStreamでラップします

于 2009-11-19T03:24:05.903 に答える
-4

文字列変数myStrLineを使用して入力文字列ストリームを作成するinSSという名前のスキャナー変数を定義して初期化します。

回答:スキャナーinSS = new Scanner(myStrLine);

于 2017-04-02T19:06:33.830 に答える