【发布时间】:2011-07-05 21:29:08
【问题描述】:
大家好,我是反抗邪恶银河帝国的节目作者。现在,我们正准备对死星进行一次大胆的进攻。
我创建了一个庞大的信息数据库,其中包含我们即将袭击死星的 X 翼和 Y 翼战斗机上的飞行员、机器人和系统。由于我们迫切需要快速访问信息,我设计了一个系统,用户可以在其中输入一串文本来指定他们想要检索的数据。
用户可以搜索许多字段。例如,如果用户想查找有关 R2D2 的数据,他可以输入查询“DROID:R2D2”并快速找到该数据。如果他需要红队所有飞行员、机器人和系统的数据,他可以输入“TEAM:RED TEAM”。
但是,该系统旨在处理更复杂的查询。从前面的查询可以看出,数据字段名和数据值是用冒号:字符分隔的。用户必须能够搜索每个字段的多个值并一次搜索多个字段。
这是我的高级用户的典型查询: "SHIPTYPE:X-WING,Y-WING;位置:94 号坞站;DROIDTYPE:R2"
我对自己处理此事的方式感到非常满意。
我使用String.Split(';') 函数读取以获取用户选择的三个数据字段的值。我使用String.Split(':') to seperate the data field name from the value, and then I userString.Split(',')` 来获取用户输入多个字段的不同字段值。你可以看看它是如何工作的。
但是,有一个问题。莉亚公主(你知道她有多挑剔)坚持在她的爆破器校准记录中使用“:”、“;”和“,”。当她尝试查询这些数据时,我的程序无法理解她的查询。她说如果不纠正这个问题,死星很快就会摧毁叛军基地。
因此,我请求您帮助提出解析用户输入的良好做法。如何让我的程序为 Leiah 公主工作?
更新我将推测我自己问题的答案。当我学习用 C 风格的语言编程时,我了解了“转义序列”,我可以在其中指定字符串文字中通常保留的字符。 (例如,一个 " 字符通常终止一个字符串文字,但我可以使用 \" 来“转义”它)成为实现它的最佳方式。在准备这次死星袭击之前,我的大部分编程经验都是使用湿气蒸发器的二进制语言,所以这对我来说是新的。
【问题讨论】:
-
翻译:“我使用分号、冒号和逗号作为分隔符 - 但有些值自然包含这些字符。我该如何解决这种情况?”对吗?
-
这是我的问题。但是,我对这类编程问题没有太多经验,所以我想提前了解我正在做的事情。我对我在 SO 上提出问题的频率感到惊讶,结果证明这是一个错误的问题。
-
感谢乔恩的翻译。那是我生命中的 5 分钟,我不会回来!
-
起初我以为我不小心到达了SciFi-Stackexchange-Beta,直到我阅读了 Jons 的翻译评论。
-
您可能对this SO question 和accepted answer 感兴趣。希望对您有所帮助。
标签: c# .net user-input string-parsing