У меня есть функция, которая принимает объект определенного типа и PrintStream
, который будет печатать, и выводит представление этого объекта. Как я могу записать этот вывод функции в String? В частности, я хочу использовать его, как в методе toString
.
Java: PrintStream для строки?
Ответ 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");
Ответ 3
Возможно, этот вопрос может помочь вам: Получить OutputStream в строку
Подкласс OutputStream и оберните его в PrintStream
Ответ 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);