文本编辑器的数据结构在哪里以高级语言存在?

时间:2013-02-25 17:03:14

标签: java swing data-structures textbox text-editor

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

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

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

1 个答案:

答案 0 :(得分:9)

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

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

使用一些更高级的数据结构的另一个原因是使实现undo和redo等功能变得更加简单。一些数据结构可以很容易地保留已删除的文本,以便通过更改一些指针或偏移量将文档放回到先前的状态。

其他数据结构有助于格式化文本,但文档编辑器(如Word)通常比文本编辑器更多。

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

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

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