Я получаю объединенную адресную строку из USPS .. Я хочу как-то ее разорвать - PullRequest
0 голосов
/ 08 июля 2011

Мы отправляем адресную строку1 и адресную строку2 для проверки.

И когда он отправляется в USPS для проверки, после проверки он объединяет обе строки адреса в строке адреса 1.

Например:

AddressLine1: 20 ROOSEVELT AVE
AddressLine2: apt# 22

После проверки он объединяет обе строки адреса:

AddressLine1: 20 Roosevelt Ave Apt# 209
AddressLine2: null

Я хочу разбить возвращенную адресную строку1 как проверенный адрес на две строки, как я могу это сделать?

Ответы [ 4 ]

1 голос
/ 06 января 2012

Чтение USPS объединяет информацию об устройстве из поля AddressLine2, которое вы отправили, потому что оно действительно принадлежит AddressLine1 (согласно их спецификациям). AddressLine2 предназначен только для посторонней информации, которая может помочь почтовому перевозчику доставить почту (см. публикация USPS 28 ).

Если вы хотите, чтобы вторичная информация (квартира, квартира и т. Д.) Была разделена на отдельное поле, вам лучше всего использовать службу, которая использует официальные данные USPS для проверки и разбора адреса на различные его компоненты, как а также составленная линия доставки.

Я разработчик программного обеспечения для SmartyStreets , компании по проверке адресов, которая предоставляет именно такую ​​услугу через API. Наша конечная точка REST / JSON предоставляет как отдельные компоненты адреса, так и полную линию доставки. Это позволит вам группировать данные любым способом, который соответствует потребностям вашего бизнеса.

1 голос
/ 08 июля 2011

Проверка USPS переформатирует текст, а не просто объединяет две строки. Я не знаю, какое переформатирование может быть использовано для разных типов адресов, но в вашем примере, похоже, единственное отличие состоит в том, что он изменился с верхнего на смешанный регистр, а номер квартиры изменился. У меня нет предложений о том, как обрабатывать изменения в информации (например, изменение номера), но если меняется только верхний / нижний регистр, вы можете сделать что-то вроде следующего:

// you specified both Java AND JavaScript; I've picked JavaScript

var originalLine1 = "...",
    originalLine2 = "...";

// somehow call USPS validation to set the following:
var validatedLine1 = "...",
    validatedLine2 = "...",
    validationPassed = true || false;

// now, did validation pass?
if (validationPassed) {
  // if we can match the old line 1 with the left-hand side
  // of the new line 1, and we're not going to be overwriting
  // a non-null value in the new line 2 then split the new line 1
  if (validatedLine2 === null &&
      originalLine1.toLowerCase()
        === validatedLine1.substr(0,originalLine1.length).toLowerCase()) {

    validatedLine2 = validatedLine1.substr(originalLine1.length);
    validatedLine1 = validatedLine1.substr(0, originalLine1.length);
  }
  // do something with the results
}

Сказав это, какова цель вызова валидации USPS? Если он изменяет текст, но в других случаях проходит проверку, может быть, вам следует просто использовать измененную версию, поскольку, по-видимому, она соответствует стандартам адресации USPS?

0 голосов
/ 08 июля 2011

Я бы искал суффикс улицы (в данном случае AVE), чтобы split() возвратил его в две строки. Он не будет идеальным, но он будет максимально точным, учитывая требования.

Список распознанных суффиксов улиц USPS можно получить здесь:

http://www.usps.com/ncsc/lookups/abbr_suffix.txt

Обратите внимание, что это также учитывает сокращения и, учитывая, что это их список, они также, вероятно, используют их во время проверки (очень вероятно, что возвращаемый адрес будет изменен на один из этих стандартных форматов).

Мне не нравится идея подсчета слов. Я жил на многочисленных улицах, которые могли бы создать проблему. Meadowcrest Dr vs. Meadow Crest Dr. Я думаю, что это прекрасный пример типов изменений, которые будет выполнять подпрограмма проверки.

Как только вы это получите, я думаю, что все довольно просто. Дайте мне знать, если вам нужно больше информации, идея

0 голосов
/ 08 июля 2011

Просто убедитесь, что вы сохранили копию объекта, прежде чем отправлять его на проверку.

Затем, когда вы вернете проверенный объект обратно, вы сможете скопировать информацию об адресе из старого объекта во вновь возвращаемый объект.объект.

Редактировать

Я по ошибке использовал слово "копировать" старую информацию, несмотря на тот факт, что копирование не то, что вы хотели бы.

Я не увереннасколько важна проверка (например, делает ли она больше, чем просто использование заглавных букв).Однако, если мы предположим, что каждое слово из исходных адресов сопоставлено со словом в новом адресе, то простой идеей будет копировать адреса слово за словом.

В вашем примере оригинал AddressLine1 имеет три слова.Таким образом, вы можете прочитать три слова из нового AddressLine1 и сохранить их.Оставшиеся два слова могут быть скопированы в новый AddressLine2.Это может быть легко достигнуто с помощью Scanner на String.Для более опытных, я уверен, что есть шаблон Regex на основе слов, который можно использовать, но я не очень хорош в этих вещах.

...