8

大家好,我是反邪恶银河帝国的节目作者。现在,我们正准备对死星进行一次大胆的进攻。

我创建了一个庞大的信息数据库,其中包含我们即将袭击死星的 X 翼和 Y 翼战斗机上的飞行员、机器人和系统的信息。由于我们迫切需要快速访问信息,我设计了一个系统,用户可以在其中输入一串文本来指定他们想要检索的数据。

用户可以搜索许多字段。例如,如果用户想查找有关 R2D2 的数据,他可以输入查询“DROID:R2D2”并快速找到该数据。如果他需要红队所有飞行员、机器人和系统的数据,他可以输入“TEAM:RED TEAM”。

但是,该系统旨在处理更复杂的查询。从前面的查询可以看出,数据字段名和数据值是用冒号分隔的:。用户必须能够搜索每个字段的多个值并一次搜索多个字段。

这是我的高级用户的典型查询:“SHIPTYPE:X-WING,Y-WING; LOCATION:docking bay 94; DROIDTYPE:R2”

我对我处理这件事的方式感到非常满意。我使用String.Split(';')读取函数来获取用户选择的三个数据字段的值。我使用String.Split(':') to seperate the data field name from the value, and then I userString.Split(',')` 来获取用户输入多个字段的不同字段值。你可以看到这是如何工作的。

但是,有一个问题。莉亚公主(你知道她有多挑剔)坚持在她的爆破器校准记录中使用“:”、“;”和“,”。当她尝试查询这些数据时,我的程序无法理解她的查询。她说,如果不纠正这个问题,死星很快就会摧毁叛军基地。

因此,我请求您帮助建议解析用户输入的良好做法。我怎样才能让我的程序为 Leiah 公主工作?

更新 我将推测我自己问题的答案。当我学习用 C 风格的语言编程时,我了解了“转义序列”,我可以在其中指定字符串文字中通常保留的字符。(例如,一个 " 字符通常终止一个字符串文字,但我可以使用 \" 来“转义”它)我猜想用我的程序做一些类似的事情是个好主意,但我不知道会成为实现它的最佳方式。在准备这次死星袭击之前,我的大部分编程经验都是使用湿气蒸发器的二进制语言,所以这对我来说是新的。

4

3 回答 3

3

以与 Google 类似的方式,您可以允许将搜索词包含在 " 标记中。因此,您可以允许:

SHIPTYPE:"BATTLESTAR:GALACTICA"; 位置:坞站 94;机器人类型:R2

于 2011-02-28T16:24:29.273 回答
2

很抱歉,《星球大战》的描述无助于澄清你的问题。

无论如何,我已经写了很多解析代码。我不太在意,String.Split()除非数据总是这样格式化。在http://www.blackbeltcoder.com/Articles/strings/a-text-parsing-helper-class有一个通用解析器类。我可能会使用类似的东西来实现更灵活的解析器。

于 2011-02-28T16:19:45.190 回答
2

您似乎在分隔符左侧使用关键字,在分隔符右侧使用实际查询值。您可以尝试一些检查以查看word包含在 the;和 the之间的:关键字是否是实际关键字,以及它是否在此时忽略分隔符。

然而,这并不简单,也不会单独使用String.Split()

于 2011-02-28T16:24:00.157 回答