2012-10-20 81 views
5

我正在編寫Java編輯HTML編輯器的過程。我希望它支持自動縮進。我有一個Composite模式實現來表示當前正在編輯的文件中的HTML標記對象。例如,這樣的代碼:字符串操作或遞歸函數?

<table> <tr> <th>Col1</th> <th>Col2</th> </tr> <tr> <td>Data1</td> <td>Data2</td> </tr> </table>

將導致在複合此結構表示:

  • 表 - > TR(第一),TR(第二)
  • TR(第一) - > TH(Col1中),TH(Col2中)
  • TR(第二) - > TD(數據1),TD(DATA2)

其中x - > y,z表示x是y和z的父親。

我這裏有兩個選擇:

  1. 創建一個遞歸函數返回與縮進一個字符串包含在內。
  2. 創建一個遞歸函數,該函數僅返回當前HTML代碼的非格式化字符串,然後添加縮進。

很容易做到第一;但是,如果他們改變模式,我覺得很難繼續按照用戶的縮進模式自動縮進。因此,我認爲選項2是可取的。如果我能夠正確地工作,我覺得這也可能更具活力。問題是,我不太確定如何操作字符串。

我的想法是,我可以以某種方式使用堆棧。我可以將一個開放的標籤推到它上面,並在關閉時彈出它。堆棧上的標籤數量將決定我需要在新行上的下一個標籤之前縮進的次數。我可以使用整數來代替,但同樣的概念適用。問題是我不知道如何去遍歷字符串中的標籤,以便我可以操縱它。

那麼,有沒有什麼辦法以我描述的方式來進行字符串操作?或者使用遞歸函數更好嗎?

回答

1

鑑於你的問題非常明確,我認爲你是最好的人來回答它,你只需要更多的信息。

要拿出這些信息,這可能會有所幫助:

  1. 考慮文本的整個生命週期。您將需要對擊鍵等作出反應。然後將模型和演示文稿清晰分開要好得多,而不是操縱填充字符串。另一個好處是,你可以從模型

  2. 考慮的例子相對獨立地選擇現有的文本編輯組件:富文本編輯器,開源喜歡的jEdit等

+0

我認爲最好的選擇可能是使用遞歸函數。非常感謝你。 – CouchCommando

0

對於XHTML的工作就可以完成非常容易使用XSLT和XSL樣式表。

+0

不幸的是,這不適用於我的情況。我正在談論編寫程序的後端。下面是關於發生了什麼的簡單UML圖: http://imgur.com/Aivc6 BufferContext包含一個字符串 - 當前正在編輯的HTML文件,它是從您看到的複合結構構建的。 HTMLConstruct只是一個定義所有具體結構的接口,它們是表示HTML標籤及其內部信息的對象。請注意,BufferContext是Model的一部分,而不是View的一部分。 – CouchCommando