2012-04-20 13 views
0

プログラミング割り当ての一部は、状態パターンを使用して文字列を解析する必要があります。 State Patternが使用されていることが明示的に要求されるため、他のオプションは使用できません。文字列解析のための状態パターンの使用

例列は: "更新ユーザフィルタのuserId = USER3設定名= XXX"。 (太字はキーワードです)。

をクエリを使用すると、状態パターンを使用する必要があります解析中に次のように

要求があります。 4つの 状態があります:オペレーター、OBJECT、FILTERおよびVALUES。

私はState Patternについての例を見ましたが、私はそれを得たと思いますが、それを文字列解析に適用する方法を理解することはできませんでした。

誰かが私にいくつかのヒントをくれたらうれしいです。

+1

私は、これは私の質問に関連してどのように彼らのために良い、正規表現は、状態パターン –

+0

@SamIamを使用していることと思いますが、? – utdemir

答えて

1

まず、状態インターフェイスを作成します。おそらく1つの方法で:parse

4つの具体的な状態を作成します。文字列の一部だけを解析するようにそれぞれを実装します。文字列を分割して状態を変更するコンテキストがコンテキストにあります。あなたのコンテキストクラスで

あなたは次のようにします。

  • をあなたはOperatorStateは、常に最初のものであることを知って、それをあなたのコンテキストの状態
  • のinitそう。あなたが現在の状態に読んだその文字列(Opearator)
  • 変更し、次のいずれか(FilterState
への現在の状態を使用すると、次の
  • キーワード(「フィルタ」)を到達するまでの文字列を読んで移動します

    など...

    状態パターンを理解していれば、これで解決策を作成できます。

    注:キーワードと状態を持つ辞書を使用して自動化することはできますが、単純な解決策で十分です。

    グッドラック

  • +0

    ありがとう、私はこの質問の後に私の先生からそれを学んだ、それも私の解決策でした。 – utdemir

    0

    私は、これは間違って取得する場合、次に私を無視して、私は、あなたが状態パターンによって何を意味するか誤解されるかもしれない、

    のはあなたが空の状態""で始まる文字列"abac"

    を探しているとしましょう文字列の文字を反復処理します。あなたは状態"a"に行く'a''b'は、状態"ab"に行くゲットするならば、'a'を取得し、あなたは、バック状態"a"に空の状態に何かを行く、など

    あなたは状態"abac"に得れば、あなたはしましたあなたの文字列を見つけました。正規表現を見つけるのは簡単なDFAです。

    +0

    しかし、私は何も探していないので、それは私の質問にどうやって当てはまりますか? – utdemir