按照指定字符分割读取文本,重写一个reader.readLine!!!

说明

本文实现一个自定义的字符串分割读取器 CustomStringSplitReader,它可以从指定文件中读取内容,并根据指定的分隔符返回一个个子字符串。在本文中,分隔符是 $$$,文件编码是 GBK

最开始实现的目的是取代reader.readLine按照自己所需的分隔符将文本的内容读入。

代码解释

类声明和成员变量:

CustomStringSplitReader 类包含三个主要成员变量:BufferedReader reader、String delimiter、StringBuilder buffer。
reader 是用于读取文件内容的 BufferedReader
delimiter 是用来分割字符串的分隔符。
buffer 是用来暂时存储字符的 StringBuilder,用于构建读取到的字符串。

main 方法:

1、设置文件路径、分隔符和文件编码。
2、创建 CustomStringSplitReader 对象并循环读取文件内容。
3、打印每个读取到的 token,并在完成后关闭读取器。

构造函数 CustomStringSplitReader:

1、初始化 BufferedReader 以指定的文件路径和编码方式读取文件。
2、初始化分隔符和缓冲区。

readToken 方法:

1、逐字符读取文件内容并追加到缓冲区。
2、检查是否遇到了分隔符,如果遇到,则截取分隔符之前的内容作为一个 token 返回,并清空缓冲区。
3、如果文件读取结束且缓冲区中还有内容,则将缓冲区中的内容作为最后一个 token 返回。

close 方法:

关闭 BufferedReader。

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.FileInputStream;
import java.sql.SQLOutput;

public class CustomStringSplitReader {

    private BufferedReader reader;
    private String delimiter;
    private StringBuilder buffer;

    public static void main(String[] args) {
        String filePath = "C:\\Users\\yan\\Desktop\\Test.txt"; // 替换为实际文件路径
        String delimiter = "【{(自定义的分隔符号字符串)}】"; //替换为指定的分隔字符串
        String encoding = "UTF-8"; // 文件的编码方式

        try {
            CustomStringSplitReader customReader = new CustomStringSplitReader(filePath, delimiter, encoding);

            String token;
            while ((token = customReader.readToken()) != null) {
                System.out.println(token);
                System.out.println("--------------------------------------");
            }

            customReader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public CustomStringSplitReader(String filePath, String delimiter, String encoding) throws IOException {
        this.reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), encoding));
        this.delimiter = delimiter;
        this.buffer = new StringBuilder();
    }

    public String readToken() throws IOException {
        int charCode;
        while ((charCode = reader.read()) != -1) {
            char character = (char) charCode;
            buffer.append(character);
            if (buffer.toString().endsWith(delimiter)) {
                String token = buffer.substring(0, buffer.length() - delimiter.length());
                buffer.setLength(0); // 清空缓冲区
                return token;
            }
        }

        // 处理文件末尾的情况
        if (buffer.length() > 0) {
            String token = buffer.toString();
            buffer.setLength(0);
            return token;
        }

        return null; // 文件读取结束
    }

    public void close() throws IOException {
        reader.close();
    }

}

Input

C:\Users\yan\Desktop\Test.txt中文本如下

夏天的早晨,总是透着一股清新的凉意,仿佛大自然在夜晚编织了一张细密的网,将酷热挡在了外面。黎明时分,鸟儿们开始在树梢间窃窃私语,【{(自定义的分隔符号字符串)}】微风轻拂过叶片,带来一阵阵清脆的沙沙声。阳光从东方悄悄爬起,一点一点地洒在大地上,温柔而坚定地驱散着夜的黑暗。
走在乡间的小路上,两侧是碧绿的稻田,【{(自定义的分隔符号字符串)}】微风拂过,稻浪随着节奏舞动,像是在演奏一曲无声的交响乐。偶尔,有几只蜻蜓掠过水面的倒影,翅膀闪烁着金色的光芒。一群白鹭悠然自得地在田间觅食,它们的身姿优雅,像一幅静谧的画卷。
【{(自定义的分隔符号字符串)}】正午时分,太阳高挂在头顶,大地被炙热的阳光笼罩,空气中弥漫着一股暖洋洋的气息。树荫下,是人们避暑的好去处。老人们聚在一起,聊着家长里短,孩子们则在一旁追逐嬉戏,笑声如同银铃般悦耳。远处,河流静静地流淌,偶尔有鱼跃出水面,在阳光下划出一道美丽的弧线。傍晚时分,太阳缓缓西沉,天空被染上一抹绚丽的橙红色。此时,晚风徐徐吹来,带走了白日的酷热,留下的是一片宁静与舒适。家家户户的窗户里,飘出饭菜的香气,伴随着的是一家人欢聚的笑语声。夜幕降临,乡村的夜空显得格外澄澈,一颗颗星星像宝石般镶嵌在天幕上,【{(自定义的分隔符号字符串)}】闪烁着迷人的光辉。
夏夜的凉爽总是让人心旷神怡。月光如水,洒在田野上,给大地披上了一层梦幻的面纱。此时,虫鸣声此起彼伏,仿佛在为这静谧的夜晚增添一丝生机。躺在院子里的竹床上,仰望星空,思绪也随之飘向远方。这一刻,仿佛时间都静止了,只剩下内心的宁静与满足。
夏日的韵律,就像一首悠扬的诗篇,充满了生命的活力与自然的美好。在这片土地上,每一个瞬间都值得珍藏,每一种感动都值得铭记。愿我们在这夏日的韵律中,找到心灵的归宿,感受生活的真谛。

Output

夏天的早晨,总是透着一股清新的凉意,仿佛大自然在夜晚编织了一张细密的网,将酷热挡在了外面。黎明时分,鸟儿们开始在树梢间窃窃私语,
--------------------------------------
微风轻拂过叶片,带来一阵阵清脆的沙沙声。阳光从东方悄悄爬起,一点一点地洒在大地上,温柔而坚定地驱散着夜的黑暗。
走在乡间的小路上,两侧是碧绿的稻田,
--------------------------------------
微风拂过,稻浪随着节奏舞动,像是在演奏一曲无声的交响乐。偶尔,有几只蜻蜓掠过水面的倒影,翅膀闪烁着金色的光芒。一群白鹭悠然自得地在田间觅食,它们的身姿优雅,像一幅静谧的画卷。

--------------------------------------
正午时分,太阳高挂在头顶,大地被炙热的阳光笼罩,空气中弥漫着一股暖洋洋的气息。树荫下,是人们避暑的好去处。老人们聚在一起,聊着家长里短,孩子们则在一旁追逐嬉戏,笑声如同银铃般悦耳。远处,河流静静地流淌,偶尔有鱼跃出水面,在阳光下划出一道美丽的弧线。傍晚时分,太阳缓缓西沉,天空被染上一抹绚丽的橙红色。此时,晚风徐徐吹来,带走了白日的酷热,留下的是一片宁静与舒适。家家户户的窗户里,飘出饭菜的香气,伴随着的是一家人欢聚的笑语声。夜幕降临,乡村的夜空显得格外澄澈,一颗颗星星像宝石般镶嵌在天幕上,
--------------------------------------
闪烁着迷人的光辉。
夏夜的凉爽总是让人心旷神怡。月光如水,洒在田野上,给大地披上了一层梦幻的面纱。此时,虫鸣声此起彼伏,仿佛在为这静谧的夜晚增添一丝生机。躺在院子里的竹床上,仰望星空,思绪也随之飘向远方。这一刻,仿佛时间都静止了,只剩下内心的宁静与满足。
夏日的韵律,就像一首悠扬的诗篇,充满了生命的活力与自然的美好。在这片土地上,每一个瞬间都值得珍藏,每一种感动都值得铭记。愿我们在这夏日的韵律中,找到心灵的归宿,感受生活的真谛。
--------------------------------------
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值