【发布时间】:2011-10-20 21:12:34
【问题描述】:
问题是如何检测字符串中的 5 个数字。因此,查找美国邮政编码。
旁注:我想将代码与 GWT 一起使用,因此正则表达式和第三方库存在限制。否则我只会使用net.sourceforge.jgeocoder。
【问题讨论】:
-
您的意思是在用户键入时进行字符串识别吗?
标签: java string parsing postal-code
旁注:我想将代码与 GWT 一起使用,因此正则表达式和第三方库存在限制。否则我只会使用net.sourceforge.jgeocoder。
【问题讨论】:
标签: java string parsing postal-code
如果您要使用正则表达式,这应该适用于严格格式的 ZIP: ^\d{5}([-+]?\d{4})?$
但是还是有问题。某些应用程序尝试将 5 位 ZIP 解释为整数,例如 Microsoft Excel。这意味着有时前面有零的邮政编码,例如新英格兰和波多黎各的邮政编码,经常会出现问题。因此,您可能还需要考虑查找 3 位和 4 位值。
美国的“第一个”邮政编码是 00501,是 IRS。 (也许我们不应该让那个来验证!)当解释为整数时,它是 501。现在我们遇到了一个问题。
了解这一点很重要,因为与具有 mod 10 校验和的信用卡不同,地址不是自我验证的。这意味着如果没有某种外部授权,您无法知道地址是否正确格式化和标准化。
一旦您需要通过外部机构对地址进行标准化,您也可以验证和确认地址。
我应该提到我是 SmartyStreets 的创始人。我们有一个基于网络的address verification service,您可以在其中以编程方式将您的地址提交给我们,我们将对其进行清理、标准化和验证。
【讨论】:
\\d{5} 作为一个正则表达式,我相信这将是一个起点
代码:
String[] tokens = string.split("\\d{5}");
// check token length.
从我的手机完成,所以请原谅拼写和语法
【讨论】:
对我有用的是:
(\d{5}(?=\s|$))|(\d{5}-\d{4}(?=\s|$))
【讨论】:
用正则表达式表示很简单:"^\d{5}"
看看如何在java中实现正则表达式映射:http://www.regular-expressions.info/java.html
【讨论】:
使用正则表达式。
\d{5}
因为 zip 应该在地址的末尾
\d{5}$
【讨论】:
在美国有两种形式的 Zip:5 位数字(称为邮政编码)和 9 位数字(称为 zip +4)。这是解析任何有效的美国邮政编码的算法: 假设:起点是一个包含邮政编码(或 zip+4)候选的字符串。
修改为仅 5 位数的 zip:
【讨论】:
这是我从地址字符串中解析邮政编码并将其与邮政编码数组进行比较的操作。地址字符串的格式为: 1234 Easy St, City, State 55555, USA。它还可以处理 55555-5555 的拉链
private static final Pattern pattern = Pattern.compile("\\d{5}(?:[-\\s]\\d{4})?");
private static int []zipcodes = {<your array of zips>};
public static boolean isInServiceArea(String address) {
Matcher matcher = pattern.matcher(address);
int zipcode = 0;
if (matcher.find()) {
zipcode = Integer.parseInt(matcher.group(0));
Log.d(TAG, "zipcode: " + zipcode);
}
for (int code : zipcodes) {
if (code == zipcode) {
return true;
}
}
return false;
}
【讨论】: