StringWriter类的使用

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringWriter类的使用相关的知识,希望对你有一定的参考价值。

概述

在字符串缓冲区中收集输出的字符流,可用于构造字符串, 关闭流无效,关闭后调用其他方法不会报异常。

构造方法

构造方法说明
public StringWriter()使用默认的初始字符串缓冲区大小创建一个新的字符串Writer,默认大小为16个字符。
public StringWriter(int initialSize)使用指定的大小创建一个新的字符串Writer。

常用方法

实例方法说明
void write(int c)向流中写入单个字符。
void write(char cbuf[])向流中写入字符数组。
void write(String str)向流中写入字符串。实际上是调用append()方法写入。
void write(String str, int off, int len)向流中写入指定字符串的一部分,从字符串的off索引位置开始,写入len个字符。
void write(char cbuf[], int off, int len)向流中写入指定字符数组中的一部分,从字符数组中的下标off开始,写入len个字符。
StringWriter append(char c)将指定字符附加到此StringWriter中。
StringBuffer getBuffer()返回字符串缓冲区。
String toString()以字符串形式返回缓冲区的当前值。
void close()闭流,但无效,关闭后仍然可以调用流的方法。

实例

public class Test {
    public static void main(String[] args) throws IOException {
        // 创建StringWriter实例对象
        StringWriter sw = new StringWriter();
        StringWriter sw2 = new StringWriter(5);// 实际上是创建一个指定initialSize长度的字符数组

        // write()方法,将字符串或字符数组写入到流中
        sw.write('c');// 写入一个字符char
        sw.write("Hello".toCharArray());// 写入一个字符数组char[]
        sw.write("Hello World!");// 写入一个字符串String
        sw.write("Hello World!", 2, 4);// 写入一个字符串String,从字符串的off索引位置开始,写入len个字符
        sw.write("Hello World!".toCharArray(), 0, 5);// 写入一个字符数组char[],从字符数组中的下标off开始,写入len个字符

        // append()方法
        sw.append('X');// 向流中添加一个字符

        // toString()方法,将流对象中的数据以字符串的形式输出
        System.out.println(sw.toString());

        // getBuffer()方法,返回流的字符缓冲对象StringBuffer
        StringBuffer buffer = sw.getBuffer();

        // close()方法,关闭流,但无效,关闭后仍然可以调用流的方法
        sw.close();
        sw.write('中');
        System.out.println(sw.toString());
    }
}
/*打印结果:
    cHelloHello World!llo HelloX
    cHelloHello World!llo HelloX中
 */

使用

实际开发中,这个类使用较少。但也有合适的应用场景,例如当我们想要写入一个字符串,但是API要求必须是Writer或Stream,那么我们就可以使用StringWriter,来将字符串传递进去。例如:

public void process(Person person, Writer writer);

例如我们就可以将堆栈跟踪返回为字符串,然后做相关的处理。

public class Demo {
    public static void main(String[] args) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = format.parse("202106-14");
        } catch (ParseException e) {
//            e.printStackTrace();
            // 创建一个StringWriter
            StringWriter sw = new StringWriter();
            // 使用此StringWriter创建PrintWriter
            PrintWriter pw = new PrintWriter(sw);
            // 将堆栈跟踪信息打印到StringWriter中
            e.printStackTrace(pw);
            // 将堆栈跟踪信息作为字符串
            String exceptionMessage = sw.toString();
            System.out.println("打印的异常信息:" + exceptionMessage);
        }
    }
}

以上是关于StringWriter类的使用的主要内容,如果未能解决你的问题,请参考以下文章

StringWriter 的 toString 方法更改 TimeZone

使用 StringWriter 进行 XML 序列化

使用 StringWriter、StringBuilder 和 XmlTextWriter 加载 XML 并将其写入字符串

不关闭 stringwriter 会导致泄漏吗?

不关闭 stringwriter 会导致泄漏吗?

Jekyll 偏移代码片段高亮的初始行