我们正在发送地址行1和地址行2以进行验证。
当它被送到USPS进行验证时,在验证之后,它连接地址行1中的两个地址线。
例如:
AddressLine1: 20 ROOSEVELT AVE
AddressLine2: apt# 22
验证后,它将连接两个地址行:
AddressLine1: 20 Roosevelt Ave Apt# 209
AddressLine2: null
我想将返回的地址行1作为已验证的地址拆分为两行,我该怎么做?
我们正在发送地址行1和地址行2以进行验证。
当它被送到USPS进行验证时,在验证之后,它连接地址行1中的两个地址线。
例如:
AddressLine1: 20 ROOSEVELT AVE
AddressLine2: apt# 22
验证后,它将连接两个地址行:
AddressLine1: 20 Roosevelt Ave Apt# 209
AddressLine2: null
我想将返回的地址行1作为已验证的地址拆分为两行,我该怎么做?
4条答案
按热度按时间8qgya5xd1#
USPS验证正在重新格式化文本,而不仅仅是连接两行。我不知道不同类型的地址可能涉及到哪种重新格式化,但在您的示例中,唯一的区别似乎是从大写更改为混合大小写,并且公寓编号也发生了变化。我没有关于如何处理信息更改(如数字更改)的建议,但如果只有大写/小写更改,您可以执行类似以下操作:
话虽如此,称为USPS验证的目的是什么?如果它修改了文本,但其他人通过了验证,也许您应该只使用修改后的版本,因为这可能遵循USPS的寻址标准?
vqlkdk9b2#
USPS上的读数连接了您提交的AddressLine2字段中的单位信息,因为它实际上属于AddressLine1(根据他们的规范)。AddressLine2仅用于帮助 Postman 递送邮件的无关信息(参见USPS出版物28)。
如果您想要次要信息(公寓、单位等)拆分到一个单独的字段中,最好使用一个服务,该服务利用官方的USPS数据来验证地址并将其解析为它的各个组件以及组成的递送行。
我是SmartyStreets的软件开发人员,这是一家通过API提供此类服务的地址验证公司。我们的REST/JSON端点既提供单独的地址组件,也提供完整的交付行。这将允许您以任何适合您的业务需求的方式对数据进行分组。
k2arahey3#
只需确保您在发送对象进行验证之前保留了该对象的副本。
然后,当您得到经过验证的对象时,可以将旧对象中的地址信息复制到新返回的对象中。
编辑
我错误地使用了“复制”旧信息这个词,尽管事实是复制不是你想要的。
我不确定验证有多复杂(例如,它不仅仅是处理大小写)。然而,如果我们假设原始地址中的每个词都Map到新地址中的一个词,那么一个简单的想法是逐个词地复制地址。
在您的示例中,原始
AddressLine1
中有三个单词。这样你就可以从新的AddressLine1
中读取三个单词,并保留它们。然后可以将剩下的两个字复制到新的AddressLine2
中。这可以通过在String
上使用Scanner
轻松实现。对于更熟练的人,我相信有一种基于单词的Regex模式可以使用,但我不太擅长这些东西。xn1cxnb44#
我会搜索街道后缀(在本例中为Ave),将其重新放回两行。它不会是完美的,但考虑到要求,它会尽可能地正确。
您可以从以下地址获取已识别的USPS街道后缀列表:
http://www.usps.com/ncsc/lookups/abbr_suffix.txt
请注意,这也考虑了缩写,因为这是列表,他们也可能在验证期间使用这些缩写(返回的地址很可能会被更改为这些标准格式之一)。
我不喜欢字数计算的想法。我曾在无数条街道上生活过,这会制造一个问题。Meadowcrest博士VS Meadow Crest博士我认为这是一个完美的例子,说明了验证例程将进行的更改类型。
一旦你有了它,我认为从那里开始就很简单了。如果你需要更多的信息,请告诉我这个想法