使用状态模式进行字符串解析

时间:2012-04-20 16:36:08

标签: java design-patterns

我的编程作业的一部分需要使用State Pattern解析String。明确要求使用状态模式,因此不允许其他选项。

示例字符串为:“ 更新 用户过滤器 userId = user3 设置名称= xxx ”。 (粗体是关键词)。

请求如下:

  

在解析查询时,您应该使用State Pattern。有四个   陈述:运营商,对象,过滤器和价值观。

我查看了关于状态模式的示例,我想我得到了它,但我无法弄清楚如何将其应用于字符串解析。

如果有人给我一些提示,我会很高兴的。

2 个答案:

答案 0 :(得分:1)

首先创建你的状态界面。也许有一种方法:parse

创建4个具体状态。实现每个只解析其部分字符串,您的上下文将负责拆分字符串并更改状态。

在您的上下文类中,您执行以下操作:

  • 您知道OperatorState始终是第一个,所以init
  • 你的上下文状态。阅读字符串直到你到达下一个
  • keyword(“filter”)将您读过的字符串移动到当前状态(Opearator)
  • 将当前状态更改为下一个(FilterState

等等......

如果您了解状态模式,那么这应该足以构建解决方案。

注意:您可以拥有一个包含关键字和状态的字典,这样您就可以将其自动化,但在您的情况下,我认为一个简单的解决方案就足够了。

祝你好运

答案 1 :(得分:0)

我可能会误解你的态度是什么意思,所以如果我弄错了,那就不理我了,

假设您正在寻找字符串"abac"

从空状态""开始并迭代字符串的字符。如果你得到一个'a',那么你可以通过"a"来获得'b',转到州"ab",获取'a',然后返回州{{1}其他任何空状态等等

一旦你找到状态"a",你就找到了你的字符串。找到正则表达式是一个简单的DFA。