জাভা: মুদ্রণ স্ট্রিং স্ট্রিং?


115

আমার একটি ফাংশন রয়েছে যা একটি নির্দিষ্ট ধরণের একটি অবজেক্ট নিয়ে যায় এবং PrintStreamপ্রিন্ট করতে হয় এবং সেই বস্তুর প্রতিনিধিত্ব করে। আমি কিভাবে একটি স্ট্রিংয়ে এই ফাংশনটির আউটপুট ক্যাপচার করতে পারি? বিশেষত, আমি এটি একটি toStringপদ্ধতির মতো ব্যবহার করতে চাই ।

উত্তর:


193

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);

10
সমস্ত সংস্থান মুক্ত করতে মুদ্রণযন্ত্রটি বন্ধ করতে ভুলবেন না।
টুববার

9
আমি PrintStream ps = new PrintStream(baos,true,"utf-8");
চরসেট

5
1.7new String(baos.toByteArray(), java.nio.charset.StandardCharsets.UTF_8); সাল থেকে উপলব্ধ ব্যবহার করুন , এটি ছুঁড়ে না

2
@ টবুর অবশ্যই থাম্বের একটি ভাল নিয়ম, তবে ByteArrayOutputStream.close()" এর কোনও ফল নেই ", কারণ ব্যাকিং অ্যারে ছাড়া মুক্ত করার মতো কোনও সংস্থান নেই যা আবর্জনা সংগ্রহকারী দ্বারা পরিচালিত হবে।
ডিমো 414

ByteArrayOutputStreamআছে toString(String charsetName), তবে কেবল স্ট্রিং আর্গুমেন্ট গ্রহণ করুন। এছাড়াও নোট করুন যে বাইটআর্যআউটপুট স্ট্রিমটি সিঙ্ক্রোনাইজ করা হয়েছে , যা সম্ভবত কাম্য নয়
আতঙ্কিত হন না

31

আপনি একটি প্রিন্টস্ট্রিম নির্মাণ করতে পারেন বাইটআর্যআউটপুট স্ট্রিমটি কনস্ট্রাক্টরকে দিয়ে গেছে যা আপনি পরে মুদ্রণপ্রবাহে লেখা পাঠ্যটি ধরতে ব্যবহার করতে পারেন।

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

5

পূর্ববর্তী উত্তরগুলির একীকরণ, এই উত্তরটি জাভা 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();


-3

ইনএসএস নামের একটি স্ক্যানার ভেরিয়েবল সংজ্ঞায়িত করুন এবং আরম্ভ করুন যা স্ট্রিং ভেরিয়েবল মাইএসটিআলাইন ব্যবহার করে একটি ইনপুট স্ট্রিং স্ট্রিম তৈরি করে।

উত্তর: স্ক্যানার ইনএসএস = নতুন স্ক্যানার (মাইএসটিআরলাইন);

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.