0

我的编程任务的一部分需要使用状态模式解析字符串。明确要求使用状态模式,因此不允许其他选项。

示例字符串是:“更新用户过滤器userId=user3 set name=xxx ”。(粗体是关键字)。

请求如下:

在解析查询时,您应该使用状态模式。有四种状态:OPERATOR、OBJECT、FILTER 和 VALUES。

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

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

4

2 回答 2

1

首先创建你的状态接口。也许用一种方法:parse

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

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

  • 你知道OperatorState总是第一个,所以初始化
  • 你上下文的状态。阅读字符串,直到到达下一个
  • 关键字(“过滤器”)将您已阅读的字符串移动到当前状态(操作员)
  • 将当前状态更改为下一个 ( FilterState)

等等...

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

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

祝你好运

于 2013-03-09T15:04:53.033 回答
0

我可能误解了您所说的状态模式是什么意思,所以如果我弄错了,请忽略我,

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

您从空状态开始""并向下迭代字符串的字符。如果你得到一个'a'你去状态"a"得到一个'b',去状态"ab",得到'a',你回到状态"a",任何其他的空状态,等等

一旦你说"abac"你找到了你的字符串。查找正则表达式是一个简单的 DFA。

于 2012-04-20T16:55:34.023 回答