3

我读过数据结构在文本编辑器中被大量使用。但正如我所看到的,如果我正在用高级语言编写一个简单的文本编辑器,那么就不需要使用任何数据结构。

例如,在 Java 中,我可以使用 SwingJTextAreagetText()方法将我拥有的字符串保存到文件中。基本上,我有一个没有数据结构的简单文本编辑器。

我猜编辑的数据结构JTextArea本身就是实现的。它是否正确?或者数据结构是否更低;也就是说,操作系统在哪里接受来自键盘的数据到缓冲区?那么有人可以帮助我理解数据结构是在什么抽象级别实现的?

4

1 回答 1

11

文本编辑器中的关键数据结构是保存文本的结构。 本文很好地总结了人们为文本编辑器选择的结构类型。这篇文章很旧,但今天仍然非常重要。

非常简单的数据结构(如字符数组)对于某些类型的操作往往太慢,例如在已经很长的文档的开头插入一个字符,因为您最终会移动或复制大量数据. 大多数数据结构通过巧妙地将文档分成块来减少或限制移动的数据量。我链接的文章有详细信息。

使用一些更高级的数据结构的另一个原因是更容易实现撤消和重做等功能。一些数据结构可以很容易地保留已删除的文本,以便通过更改一些指针或偏移量来轻松地将文档恢复到以前的状态。

额外的数据结构可以帮助格式化文本,但这些数据结构通常更适用于文档编辑器(如 Word),而不是文本编辑器。

JTextArea(以及其他平台中的类似功能)本质上是文本编辑器,它们可能使用我链接到的文章中的一种数据结构。

如果您想在该级别编写文本编辑器而不是使用现有的,则需要实现几种类型的功能:

  1. 将文本从文件加载到数据结构并再次保存。
  2. 响应修改文本的按键。例如,如果用户键入一个字母键,您需要将该字母插入到当前位置的文本数据结构中。如果他们按退格键,您需要删除一个字符。等等。
  3. 在屏幕上显示文档。您必须经常将窗口坐标映射到文本序列中的某个点,反之亦然。例如,如果用户单击鼠标,您需要将单击的 (x,y) 坐标转换为文本序列中的某个位置。根据您的布局的复杂程度,您可能能够即时计算它,但它通常有助于拥有一个额外的数据结构,作为文本序列和窗口坐标之间的映射。当然,如果文本更改或窗口大小调整,您必须更新该数据结构。
于 2013-02-25T21:11:06.410 回答