使用特殊字符解析用户输入的良好实践?

时间:2011-02-28 16:14:20

标签: c# .net user-input string-parsing

问候,我是叛逆邪恶银河帝国的节目作家。现在,我们正准备对死星进行大胆的攻击。<​​/ p>

我已经在我们的X翼和Y翼战斗机上创建了一个关于我们的飞行员,机器人和系统的大量信息数据库,这些战斗机将很快袭击死星。由于我们快速访问信息的关键需求,我设计了一个系统,用户可以输入一个文本字符串来指定他们想要检索的数据。

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

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

以下是我的更高级用户的典型查询: “SHIPTYPE:X-WING,Y-WING;位置:停靠湾94; DROIDTYPE:R2”

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

然而,有一个问题。莱娅公主(你知道她是多么挑剔)坚持在她的冲击波校准记录中使用':',';'和','。当她尝试查询此数据时,她的查询对我的程序来说无法理解。她说,如果不纠正这个问题,死星将很快摧毁反叛基地。

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

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

3 个答案:

答案 0 :(得分:3)

与Google类似,您可以允许将搜索字词括在“标记中。所以您允许:

SHIPTYPE: “太空堡垒:GALACTICA”;位置:停靠站94; DROIDTYPE:R2

答案 1 :(得分:2)

对不起,星球大战的描述并没有帮助澄清你的问题。

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

答案 2 :(得分:2)

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

然而,这并不简单,也不仅仅适用于String.Split()

相关问题