java读取Markdown配置文件
之前的文章中自定义实现过一个简单的状态机, 以前想的是读取json文件, 这样读起来更方便一点, 但是后来发现过于复杂的流程如果还是用json文件作为配置文件的话就比较麻烦了, 因此, 我们需要更直观地配置文件, 正好markdown能够完美满足我们的需求
Markdown
Markdown语法比较简单, 这样读起来也比较方便, 我们可以先设置一个简单的流程图, 此处我使用IDEA直接编辑的, 使用IDEA画流程图需要安装一个插件
如果画的流程图没有加载出来, 可以在确认插件安装成功后重启IDEA即可正常加载出来
制作流程图
markdown语法可以自行百度, 这是最简单的一个流程图
## 简单流程图
```mermaid
graph TD
A --提交--> B
B --驳回--> C
B --通过--> D
```
读取Markdown
这里主要用到的是正则表达式来匹配Markdown的配置, 相当于我们自己指定了一个规则
这里是将读取到的配置写进了Table中, 需要引入guava依赖
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>31.1-jre</version>
</dependency>
import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MermaidParser {
public static void main(String[] args) {
String filePath = "配置文件路径";
Table<String, String, String> table = parseMermaid(filePath);
System.out.println(table);
}
public static Table<String, String, String> parseMermaid(String filePath) {
Table<String, String, String> table = HashBasedTable.create();
try {
// 1. 读取文件内容
String content = Files.readString(Paths.get(filePath));
// 2. 提取mermaid代码块(使用非贪婪匹配)
Pattern mermaidPattern = Pattern.compile("```mermaid\\n([\\s\\S]*?)\\n```");
Matcher mermaidMatcher = mermaidPattern.matcher(content);
if (mermaidMatcher.find()) {
String mermaidCode = mermaidMatcher.group(1);
// 3. 解析每一行(允许节点包含空格)
Pattern edgePattern = Pattern.compile("(.+?)\\s+--(.+?)-->\\s*(.+)"); // 关键修改点
for (String line : mermaidCode.split("\\n")) {
line = line.trim();
Matcher m = edgePattern.matcher(line);
if (m.find()) {
String from = m.group(1).trim();
String label = m.group(2).trim();
String to = m.group(3).trim();
table.put(from, label, to);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
return table;
}
}