字符串操作或递归函数?

时间:2012-10-20 08:24:06

标签: java string design-patterns stack composite

我正在使用Java编写HTML编辑器。我希望它支持自动缩进。我实现了一个Composite模式来表示当前正在编辑的文件中的HTML标记对象。例如,此代码:

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

会在复合材料中产生这种结构表示:

  • 表格 - &gt; tr(第一),tr(第二)
  • tr(第一) - &gt; th(Col1),th(Col2)
  • tr(second) - &gt; td(Data1),td(Data2)

其中x - &gt; y,z表示x是y和z的父。

我有两个选择:

  1. 创建递归函数以返回包含缩进的字符串。
  2. 创建一个递归函数,只返回当前HTML代码的非格式化字符串,然后在缩进中添加。
  3. 首先很容易做到;但是,如果用户的缩进模式改变了模式,我发现很难继续自动缩进。因此,我认为选项2更可取。如果我能让它正常工作,我觉得这也可能更有活力。问题是,我不太确定如何操纵字符串。

    我的想法是我可以以某种方式使用堆栈。我可以将一个打开的标签推到它上面并在它关闭时将其弹出。堆栈上的标签数量将决定在新行上的下一个标签之前需要缩进的次数。我可以使用整数,但同样的概念适用。问题是我不知道如何遍历字符串中的标记,以便我可以操作它。

    那么,有没有办法像我描述的那样进行字符串操作?或者使用递归函数更好吗?

2 个答案:

答案 0 :(得分:1)

鉴于您提出的问题非常明确,我认为您是回答它的最佳人选,而您只需要更多信息。

要想出这些信息,这可能会有所帮助:

  1. 考虑文本的整个生命周期。您将需要对按键等作出反应。然后将模型和演示文稿清楚地分开,而不是操纵填充的字符串。另一个好处是您可以相对独立于模型选择现有的文本编辑组件

  2. 考虑示例:富文本编辑器,jEdit等开源等。

答案 1 :(得分:0)

对于XHTML,可以使用XSLT和XSL样式表轻松完成作业。