纯 Java、离线、零依赖的 TXT 小说目录识别算法。
从完整文本中提取章节标题与 UTF-16 字符偏移,可用于 Android、Kotlin/JVM、桌面 Java 程序或服务端工具。
- 无网络、无 AI API、无第三方运行时依赖;不会上传用户 TXT 文件。
- 支持传统标题:
第十二章 标题、第3卷、序章、楔子、后记、完结感言、番外:标题。 - 支持数字紧贴标题:
1标题、2 标题、仅编号标题38。 - 支持同编号分段:
47标题(上)、47标题(下)、4Part上/下。 - 过滤常见噪声:打赏记录、日期、问卷题号、链接、元数据和正文短句。
- 返回标题所在原文行号和 UTF-16 字符偏移,可直接用于 Android
TextView跳转。 - 自带单元测试。
将 ChapterDetector.java 放入项目,调用:
String text = loadYourTxt();
List<ChapterDetector.Chapter> chapters = ChapterDetector.detect(text);
for (ChapterDetector.Chapter chapter : chapters) {
System.out.println(chapter.line + " | " + chapter.offset + " | " + chapter.title);
}Kotlin 可直接调用:
val chapters = ChapterDetector.detect(text)
val offset = chapters.first().offset| 字段 | 说明 |
|---|---|
offset |
标题行在 Java String 中的 UTF-16 字符偏移 |
line |
从 1 开始的原文行号 |
title |
去除首尾空白后的原始标题行 |
kind |
numbered(数字序列)或 explicit(显式标题) |
confidence |
规则置信等级,94–100;不是机器学习概率 |
- 按行扫描文本,记录行号和每行的 UTF-16 起始偏移。
- 高置信度识别传统章节、序章、后记和番外。
- 收集数字开头的短行,并过滤问卷、打赏、URL、元数据和句末正文。
- 只保留从
1开始的连续编号;同编号仅在“上/下/篇/part”分段时保留。 - 合并、按偏移排序、去重并输出章节列表。
offset 与 Android TextView 使用的 UTF-16 下标一致:
int visualLine = layout.getLineForOffset(chapter.offset);
scrollView.smoothScrollTo(0, layout.getLineTop(visualLine));需要 JDK 8 或更高版本及 Gradle:
gradle test
gradle jar本项目采用 MIT License。
TXT Chapter Detector is a dependency-free Java library for offline novel chapter detection. It supports conventional Chinese headings, numeric-inline headings, split chapters, and common noise filtering.