当前位置:  开发笔记 > 编程语言 > 正文

根据USPS状态缩写验证字符串

如何解决《根据USPS状态缩写验证字符串》经验,为你挑选了3个好方法。

我需要能够根据可能的美国邮政服务州缩写列表验证字符串,而Google并没有向我提供任何指示.

我知道明显的解决方案:那就是编写一个非常庞大的if(或switch)语句来检查和比较所有50个状态,但我问的是StackOverflow,因为必须有一个更简单的方法来做到这一点.是否有任何RegEx或枚举器对象,我可以使用它以尽可能快的方式快速执行此操作?

顺便提一下[C#和.net 3.5]

USPS州缩写列表



1> Craig Trader..:

我喜欢这样的事情:

private static String states = "|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|";

public static bool isStateAbbreviation (String state)
{
  return state.Length == 2 && states.IndexOf( state ) > 0;
}

此方法的优点是使用可能使用单个机器指令进行搜索的优化系统例程.如果我正在处理非固定长度的单词,那么我会检查"|" +州+"|" 确保我没有击中子串而不是完全匹配.由于字符串连接,这将花费更长的时间,但它仍然会在固定的时间内匹配.如果要验证小写缩写以及大写,则检查state.UpperCase(),或者将"states"字符串加倍以包含小写变体.

我保证每次都会击败正则表达式或Hashtable查找,无论你运行多少次,它的内存使用量最少.



2> Michael Hare..:

我将使用有效缩写填充哈希表,然后使用输入进行检查以进行验证.如果每个字典构建有多个检查,它会更清晰,也可能更快.



3> Jon Skeet..:

HashSet 是我能想到使用.NET 3.5中内置类型的最干净的方法.(您也可以轻松地使其不区分大小写,或者将其更改为Dictionary ,其中值为全名.这也是.NET 2.0/3.0最合适的解决方案.)

至于速度 - 你真的相信这会成为你代码的瓶颈吗?HashSet很可能"非常好"(每秒数百万次查找).我相信替代品会更快 - 但更脏.在你有理由相信它会成为一个瓶颈之前,我会坚持最简单的方法.

(编辑明确提到词典<,>.)

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有