2013-02-25 28 views
3

我讀過數據結構在文本編輯器中大量使用。但正如我所看到的,如果我用高級語言編寫簡單的文本編輯器,那麼不需要使用任何數據結構。文本編輯器的數據結構在哪裏以高級語言生活?

例如,在Java中,我可以使用Swing的JTextAreagetText()方法來將字符串保存到文件中。基本上,我有一個簡單的文本編輯器,沒有數據結構。

我猜數據結構的編輯是在JTextArea本身實現的。它是否正確?或者數據結構甚至更低;也就是說,操作系統從鍵盤接收數據到緩衝區的位置?那麼有人能幫我理解,在什麼樣的抽象層次上實現了數據結構?

+1

鑑於'JTextArea'上的位僅僅是一個例子,我不確定爲Java和Swing添加標籤是否合適。問題不在於那些。添加它們會混淆(或至少淡化)問題的重點。如果最初有這些標籤,我就不太可能讀過它。 – 2015-07-10 19:59:11

回答

8

文本編輯器中的關鍵數據結構是保存文本的關鍵數據結構。 This article對於文本編輯器可以選擇的結構類型有很好的總結。文章很舊,但今天仍然很有意義。

對於某些類型的操作,非常簡單的數據結構(如字符數組)往往太慢,就像在最初已經很長的文檔中插入一個字符一樣,因爲您最終會移動或複製大量的數據。大多數數據結構通過巧妙地將文檔分成塊來減少或限制被移動的數據量。我鏈接的文章有詳細信息。

使用某些更高級的數據結構的另一個原因是爲了更簡單地實現撤銷和重做等功能。一些數據結構可以很容易地保留被刪除的文本,這樣通過改變幾個指針或偏移量就可以輕鬆地將文檔恢復到以前的狀態。

其他數據結構可以幫助格式化文本,但通常這些文件編輯器(比如Word)比文本編輯器更適合。

JTextArea(和其他平臺上的可比較功能)本質上是文本編輯器,它們可能使用我鏈接到的文章中的某個數據結構。

如果你想寫在該級別文本編輯器,而不是使用現有的,你需要實現多個類型的功能:

  1. 加載該文件中的文本數據謝靈運和再次保存它。
  2. 響應修改文本的按鍵。例如,如果用戶鍵入字母鍵,則需要將該字母插入當前位置的文本數據結構中。如果他們按退格鍵,則需要刪除一個字符。等
  3. 在屏幕上顯示文檔。您將不斷必須將窗口座標映射到文本序列中的一個點,反之亦然。例如,如果用戶單擊鼠標,則需要將點擊的(x,y)座標轉換爲文本序列中的某個位置。根據您的佈局的複雜程度,您可能可以實時計算此值,但通常有助於創建額外的數據結構,以充當文本序列與窗口座標之間的映射。當然,如果文本更改或窗口大小調整,則必須更新該數據結構。
+0

非常感謝,但還有一件事。 GUI方面如何實現?你已經提到我必須繪製座標圖,但是這是如何完成的,圖書館是用於這個目的的?以及如何在命令行編輯器(如Linux中的VIM)中管理此GUI映射?再一次,謝謝。你回答我的問題,但這只是導致另一個! – deepak 2013-02-26 12:06:49

+0

設計模式書(http://en.wikipedia.org/wiki/Design_Patterns)介紹了一個文檔編輯器的例子,其中包括用於表示屏幕到文本映射的模式(和數據結構)的想法。 – 2013-03-01 17:49:41

相關問題