📜  filterreader 将字符串转换为大写 java (1)

📅  最后修改于: 2023-12-03 15:15:04.147000             🧑  作者: Mango

使用FilterReader将字符串转换为大写

FilterReader是一个用于字符流读取过滤的抽象类,它提供了一些基本的过滤器方法,可以被子类继承和实现。我们可以通过使用FilterReader将一个字符串的所有字符转换为大写。

下面是一个使用FilterReader将字符串转换为大写的Java代码:

import java.io.*;

public class ToUpperCaseFilterReader extends FilterReader {

    public ToUpperCaseFilterReader(Reader in) {
        super(in);
    }

    @Override
    public int read() throws IOException {
        int c = super.read();
        if (c == -1) {
            return -1;
        } else {
            return Character.toUpperCase((char)c);
        }
    }

    @Override
    public int read(char[] cbuf, int off, int len) throws IOException {
        int result = super.read(cbuf, off, len);
        for (int i = off; i < off + result; i++) {
            cbuf[i] = Character.toUpperCase(cbuf[i]);
        }
        return result;
    }

    public static void main(String[] args) throws IOException {
        String testString = "This is a test string";
        StringReader stringReader = new StringReader(testString);
        ToUpperCaseFilterReader filterReader = new ToUpperCaseFilterReader(stringReader);

        char[] buffer = new char[1024];
        int read = 0;
        while ((read = filterReader.read(buffer)) != -1) {
            System.out.println(new String(buffer, 0, read));
        }
    }
}

在这个例子中,我们创建了一个名为ToUpperCaseFilterReader的类,继承了FilterReader。在类的构造函数中,我们使用super()方法调用了父类构造函数,并将一个Reader对象作为参数传递。

接下来,我们重写了read()方法和read(char[], int, int)方法。在read()方法中,我们先调用了父类的read()方法,获取到下一个字符的ASCII码。如果返回的ASCII码为-1,表示读到了文件的末尾,我们直接返回-1。否则,我们将ASCII码强转为char类型,并使用Character.toUpperCase()方法将其转换为大写。最后返回转换后的字符。

在read(char[], int, int)方法中,我们先调用了父类的read()方法,获取到读取的字符数。然后,我们通过for循环遍历读取到的字符,将每个字符都转换为大写。

最后,在主函数中,我们创建了一个测试字符串testString,并将其传入一个StringReader对象中。然后,我们使用ToUpperCaseFilterReader将StringReader转换为大写,并将结果输出到控制台中。

总之,FilterReader提供了一个非常方便的接口,可以帮助我们快速地过滤和转换字符流。在这个例子中,我们使用ToUpperCaseFilterReader将字符串全部转换为大写。