Парсинг почтового индекса с адреса США с Java - PullRequest
0 голосов
/ 05 августа 2011

Вопрос в том, как вы обнаруживаете 5 цифр, следующих друг за другом в строке. Ergo найти почтовый индекс США.

Примечание: я хотел бы использовать код с GWT, чтобы были ограничения для регулярных выражений и сторонних библиотек. В противном случае я бы просто использовал net.sourceforge.jgeocoder .

Ответы [ 7 ]

4 голосов
/ 13 октября 2011

Если вы собираетесь использовать Regex, это должно работать для строго отформатированных ZIP-архивов: ^ \ d {5} ([- +]? \ D {4})? $

  • 12345
  • 123456789
  • 12345-6789
  • 12345 + 6789
  • 12345-67ND (да, вы правильно прочитали, иногда последние два могут быть ND)

Но проблема все еще есть.Некоторые приложения пытаются интерпретировать 5-значные ZIP как целые числа - например, Microsoft Excel.Это означает, что иногда почтовые индексы с нулями впереди, такие как в Новой Англии и Пуэрто-Рико, часто имеют проблемы.Таким образом, вы также можете рассмотреть возможность поиска трехзначных и четырехзначных значений.

«Первый» почтовый индекс в США - 00501 и является IRS.(Возможно, мы не должны позволять этому проверять!) Когда интерпретируется как целое число, это 501. Теперь у нас есть проблема.

Это важно знать, потому что, в отличие от кредитных карт, которые имеют мод10 контрольных сумм, адреса не проверяются самостоятельно.Это означает, что вы не можете знать, правильно ли отформатирован и стандартизирован адрес без каких-либо внешних прав доступа.

И как только вам понадобится стандартизировать адрес с помощью внешних прав доступа, вы можетепроверьте и подтвердите адрес.

Я должен упомянуть, что я являюсь основателем SmartyStreets.У нас есть веб-служба проверки адресов , где вы можете программно отправлять нам свои адреса в виде списка, и мы будем их очищать, стандартизировать и проверять.

2 голосов
/ 05 августа 2011

\\d{5} в качестве регулярного выражения, я считаю, будет отправной точкой

Код:

String[] tokens = string.split("\\d{5}");  
// check token length.

Сделано с моего мобильного телефона, так что простите правописание и синтаксис

1 голос
/ 25 мая 2017

Что сработало для меня:

(\d{5}(?=\s|$))|(\d{5}-\d{4}(?=\s|$))
0 голосов
/ 09 октября 2017

Вот что я сделал, чтобы разобрать почтовый индекс из строки адреса и сравнить его с массивом почтовых индексов. Формат адресной строки: 1234 Easy St, Город, штат 55555, США. Он также будет обрабатывать молнии 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;
}
0 голосов
/ 05 августа 2011

В США есть две формы Zip: 5-значный номер (называемый почтовым индексом) и 9-значный номер (называемый zip +4). Вот алгоритм для анализа любого действующего почтового индекса США: Предположение: отправной точкой является строка, содержащая кандидата на почтовый индекс (или почтовый индекс + 4).

  1. Итерация по входной строке и извлечение всех цифр во вторую строку, которую я назову "zipString". Примечание: zip +4 часто пишется "12345-1234". Это удалит черту. Это может быть чрезмерно приемлемым для ваших целей, потому что это также будет работать, если входная строка "1a2b3c4d ------- 5x". Эта разболтанность, как правило, подходит мне, потому что она игнорирует простые и игнорируемые ошибки ввода (например, «1 2345» в качестве почтового индекса).
  2. Если длина zipString составляет 5 символов, то это почтовый индекс.
  3. Если длина "zipString" составляет 9 символов, первые 5 символов - это почтовый индекс, а последние 4 символа - это +4 части почтового индекса + 4.
  4. Если "zipString" не имеет ни 5, ни 9 символов, ввод недопустим.

Модифицировано только для 5-значного почтового индекса:

  1. Итерация по входной строке и извлечение всех цифр во вторую строку, которую я назову "zipString". Я предпочитаю это регулярным выражениям, потому что они игнорируют простые и игнорируемые ошибки ввода (например, «1 2345» в качестве почтового индекса).
  2. Если длина zipString составляет 5 символов, то это почтовый индекс.
  3. Если длина «zipString» не 5 символов, ввод недопустим.
0 голосов
/ 05 августа 2011

С регулярным выражением.

\d{5}

Поскольку почтовый индекс должен находиться в конце адреса

\d{5}$
0 голосов
/ 05 августа 2011

Очень просто выразить в регулярном выражении: "^ \ d {5}"

Просто посмотрите, как реализовать отображение регулярных выражений в java: http://www.regular -expressions.info/java.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...