Java で HTML エディターをコーディング中です。自動インデントをサポートしたい。現在編集中のファイル内の HTML タグ オブジェクトを表す複合パターンを実装しています。たとえば、次のコード:
<table> <tr> <th>Col1</th> <th>Col2</th> </tr> <tr> <td>Data1</td> <td>Data2</td> </tr> </table>
コンポジットでは、次の構造表現が得られます。
- テーブル -> tr(最初)、tr(2番目)
- tr(最初) -> th(Col1)、th(Col2)
- tr(秒) -> td(データ1)、td(データ2)
ここで、x -> y, z は、x が y と z の親であることを意味します。
ここには 2 つのオプションがあります。
- インデントを含む文字列を返す再帰関数を作成します。
- 現在の HTML コードのフォーマットされていない文字列を返すだけの再帰関数を作成し、後でインデントを追加します。
最初に行うのは簡単です。ただし、ユーザーがパターンを変更した場合、ユーザーのインデント パターンに従って自動インデントを続けるのは難しいと思います。このため、オプション 2 が望ましいと思います。正しく機能させることができれば、これもより動的になる可能性があると思います。問題は、文字列の操作方法がよくわからないことです。
私の考えでは、どういうわけかスタックを使用できるということです。開いているタグを押して、閉じたら外すことができます。スタック上のタグの数によって、新しい行の次のタグの前にインデントする必要がある回数が決まります。代わりに整数を使用することもできますが、同じ概念が適用されます。問題は、文字列を操作できるように、文字列内のタグを反復処理する方法がわからないことです。
それで、私が説明した方法で文字列操作を行う方法はありますか? それとも、再帰関数を使用する方が良いですか?