Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java解析美国地址的邮政编码 问题是如何检测字符串中的5位数字。因此,找到我们的邮政编码。_Java_String_Parsing_Postal Code - Fatal编程技术网

用Java解析美国地址的邮政编码 问题是如何检测字符串中的5位数字。因此,找到我们的邮政编码。

用Java解析美国地址的邮政编码 问题是如何检测字符串中的5位数字。因此,找到我们的邮政编码。,java,string,parsing,postal-code,Java,String,Parsing,Postal Code,旁注:我想将代码与GWT一起使用,因此对正则表达式和第三方库有限制。否则,我只会使用。\\d{5}作为正则表达式,我相信这将是一个起点 代码: 从我的手机上完成,所以请原谅拼写和语法用正则表达式表达非常简单:“^\d{5}” 只需了解如何在java中实现正则表达式映射:和正则表达式 \d{5} 因为邮政编码应该在地址的末尾 \d{5}$ 在美国,邮政编码有两种形式:5位数字(称为邮政编码)和9位数字(称为Zip+4)。以下是解析任何有效美国邮政编码的算法: 假设:起始点是一个包含邮政编码(或

旁注:我想将代码与GWT一起使用,因此对正则表达式和第三方库有限制。否则,我只会使用。

\\d{5}
作为正则表达式,我相信这将是一个起点

代码:


从我的手机上完成,所以请原谅拼写和语法

用正则表达式表达非常简单:“^\d{5}”


只需了解如何在java中实现正则表达式映射:

和正则表达式

\d{5}
因为邮政编码应该在地址的末尾

\d{5}$

在美国,邮政编码有两种形式:5位数字(称为邮政编码)和9位数字(称为Zip+4)。以下是解析任何有效美国邮政编码的算法: 假设:起始点是一个包含邮政编码(或zip+4)候选项的字符串

  • 迭代输入字符串并将所有数字提取到第二个字符串,我将其称为“zipString”。注意:zip+4通常写为“12345-1234”。这将拆下仪表板。出于您的目的,这可能过于容易接受,因为如果输入字符串为“1a2b3c4d--------5x”,它也会起作用。这种松散性对我来说通常很好,因为它忽略了简单且可忽略的输入错误(如邮政编码为“12345”)
  • 如果“zipString”是5个字符长,则为邮政编码
  • 如果“zipString”长度为9个字符,则前5个字符是邮政编码,后4个字符是zip+4的+4部分
  • 如果“zipString”既不是5个字符,也不是9个字符,则输入无效
  • 修改为仅限5位数的zip:

  • 迭代输入字符串并将所有数字提取到第二个字符串,我将其称为“zipString”。我更喜欢正则表达式,因为它忽略了简单且可忽略的输入错误(如邮政编码为“12345”)
  • 如果“zipString”是5个字符长,则为邮政编码
  • 如果“zipString”不是5个字符长,则输入无效

  • 如果要使用正则表达式,这应该适用于严格格式的拉链: ^\d{5}([-+]?\d{4})$

    • 12345
    • 123456789
    • 12345-6789
    • 12345+6789
    • 12345-67ND(是的,你读对了,有时最后两个可以是ND)
    但还是有一个问题。一些应用程序试图将5位数的ZIP解释为整数——例如Microsoft Excel。这意味着,有时前面有零的拉链,比如新英格兰和波多黎各的拉链,经常会出现问题。这样,您可能还需要考虑寻找3位数和4位数的值。

    美国的“第一”邮政编码是00501,是IRS。(也许我们不应该让它验证!)当解释为整数时,它是501。现在我们有问题了

    这一点很重要,因为与具有mod 10校验和的信用卡不同,地址不是自我验证的。这意味着如果没有某种外部授权,您无法知道地址是否正确格式化和标准化

    一旦您需要通过外部机构标准化一个地址,您也可以对该地址进行验证和确认

    我应该提到我是SmartyStreets的创始人。我们有一个基于web的网站,您可以通过编程方式将您的地址以列表的形式提交给我们,我们将对其进行清理、标准化和验证。

    对我有用的是:

    (\d{5}(?=\s|$))|(\d{5}-\d{4}(?=\s|$))
    

    下面是我从地址字符串解析zipcode并将其与zipcode数组进行比较的步骤。地址字符串的格式为: 美国州55555市Easy街1234号。它还可以处理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;
    }
    
    private static final Pattern=Pattern.compile(“\\d{5}(?:[-\\s]\\d{4}”);
    私有静态int[]zipcodes={};
    公共静态布尔值isInServiceArea(字符串地址){
    Matcher Matcher=pattern.Matcher(地址);
    int-zipcode=0;
    if(matcher.find()){
    zipcode=Integer.parseInt(matcher.group(0));
    Log.d(标签“zipcode:+zipcode”);
    }
    for(int代码:zipcodes){
    if(代码==zipcode){
    返回true;
    }
    }
    返回false;
    }
    
    您的意思是在用户键入时识别字符串吗?
    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;
    }