我读到数据结构在文本编辑器中被大量使用。但在我看来,如果我正在使用高级语言编写一个简单的文本编辑器,那么<strong>我就没有必要使用任何数据结构。
例如,在 Java 中,我可以使用 Swing 的 JTextArea
和 getText()
方法将我拥有的字符串保存到文件中。基本上,我有一个没有数据结构的简单文本编辑器。
我猜测用于编辑的数据结构是在 JTextArea
本身中实现的。它是否正确?还是数据结构会更低?也就是说,操作系统在哪里接受来自键盘的数据到缓冲区?那么有人可以帮助我理解数据结构是在哪个抽象级别实现的吗?
最佳答案
文本编辑器中的关键数据结构是保存文本的数据结构。 This article对人们为文本编辑器选择的结构类型进行了很好的总结。这篇文章很旧,但在今天仍然很重要。
非常简单的数据结构(比如字符数组)对于某些类型的操作来说往往太慢,比如在已经很长的文档的开头插入一个字符,因为你最终会移动或复制很多周围的数据。大多数数据结构通过巧妙地将文档分成 block 来减少或限制移动的数据量。我链接的文章有详细信息。
使用一些更高级的数据结构的另一个原因是可以更简单地实现撤消和重做等功能。一些数据结构可以很容易地保留已删除的文本,这样就可以很容易地通过更改一些指针或偏移量将文档恢复到以前的状态。
额外的数据结构可以帮助格式化文本,但这些通常更多地用于文档编辑器(如 Word)而不是文本编辑器。
JTextArea(以及其他平台中的类似功能)本质上是文本编辑器,它们可能使用我链接到的文章中的一种数据结构。
如果您想在该级别编写文本编辑器而不是使用现有编辑器,则需要实现多种类型的功能:
- 将文件中的文本加载到数据结构中,然后再次将其保存回来。
- 响应修改文本的按键。例如,如果用户键入一个字母键,您需要将该字母插入到文本数据结构的当前位置。如果他们按退格键,则需要删除一个字符。等
- 在屏幕上显示文档。您将经常需要将窗口坐标映射到文本序列中的一个点,反之亦然。例如,如果用户单击鼠标,您需要将单击的 (x,y) 坐标转换为文本序列中的某个位置。根据您的布局的复杂程度,您可能能够即时计算它,但它通常有助于拥有一个额外的数据结构来充当文本序列和窗口坐标之间的映射。当然,如果文本更改或窗口大小调整,您必须更新该数据结构。
关于java - 文本编辑器的数据结构在高级语言中位于何处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15072301/