它不会让你开心,但你可能应该花时间学习编写解析器(龙书很好)。解析器任务的问题在于,如果你知道如何去做,它们很容易,如果你不知道,它们几乎是不可能的。我会编写一个标记器,它可以识别标记,比如你想在编辑器中使用的格式指示符,以及一个用于其他所有内容<start_underline, "_">
的标记。<end_underline, "_">
结果可能如下所示:
文本:Hello _world_, /how are you?/
代币:<text, "Hello ">,<start_underline, "_">,<text, "world">,<end_underline, "_">,<text, ", ">,<start_bold, "/">,<text, "how are you?">,<end_bold, "/">,
使用布尔变量可以很容易地跟踪开始和结束,因为嵌套它们是没有意义的。这就是我已经在标记器中进行跟踪的原因。
之后,我将编写一个解析器类,它接受这些标记并将输出配置到相应的文本区域。
你看,这其实只是原理的一种应用divide and conquer
。的任务How do I do everything I want with my text?
分为3部分:
- 根据一个有用的结构,这个字符串是关于什么的?(来自Tokenizer的回答)
- 如何处理
x
所有可能的特定文本部分x
?(解析器的回答)
- 我如何表示这个字符串的解析器解释?(来自 JTextpane 或类似的答案)
Tokenizer 和 Parser 都不需要是额外的类。因为上下文并不复杂,它们可以只是您喜欢的 Textarea 类型的扩展类中的方法。
我认为,提供更详细的建议并没有帮助,下一个最佳步骤将是您可能更希望自己完成的实现。不过,请不要犹豫,询问您是否未能找到针对某个特定部分的良好解决方案。