Java: PrintStream для строки?

У меня есть функция, которая принимает объект определенного типа и PrintStream, который будет печатать, и выводит представление этого объекта. Как я могу записать этот вывод функции в String? В частности, я хочу использовать его, как в методе toString.

Ответ 1

Используйте ByteArrayOutputStream в качестве буфера:

import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;

ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos, true, "utf-8");
yourFunction(object, ps);
String content = new String(baos.toByteArray(), StandardCharsets.UTF_8);
ps.close();

Ответ 2

Вы можете создать PrintStream с ByteArrayOutputStream, переданным в конструктор, который впоследствии можно использовать для захвата текста, написанного в PrintStream.

ByteArrayOutputStream os = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(os);
...
String output = os.toString("UTF8");

Ответ 4

Объединение предыдущих ответов, этот ответ работает с Java 1.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();

Ответ 5

Определить и инициализировать переменную Scanner с именем inSS, которая создает поток входных строк, используя переменную String myStrLine.

Ans:   Сканер inSS = новый сканер (myStrLine);