【发布时间】:2014-04-09 20:50:30
【问题描述】:
我目前正在尝试找出获取地址行并将其分成三个字段的最佳方法,即文件、门牌号、街道名称和公寓号。值得庆幸的是,城市、州和邮编已经在列中,所以我只需要解析上面列出的三件事,但即使这样也很困难。我最初的希望是使用 SQL 在 COBOL 中执行此操作,但我认为我无法使用其他人在单独的问题线程中列出的 PATINDEX 示例,我不断收到 -440 SQL 代码。我的第二个想法是在Java中使用字符串作为数组并检查数组中的数字,然后是字母,然后比较“Apt”或类似的东西。到目前为止,我有这个尝试测试我最终想要做的事情,但是我正在超出数组的边界异常。
class AddressTest{
public static void main (String[] arguments){
String adr1 = "100 village rest court";
String adr2 = "1000 Arbor lane Apt. 21-D";
String[] HouseNbr = new String[9];
String[] Street = new String[20];
String[] Apt = new String[5];
for(int i = 0; i < adr1.length();i++){
String[] forloop = new String[] {adr1};
if (forloop[i].substring(0,1).matches("[0-9]")){
if(forloop[i+1].substring(0,1).matches("[0-9]")){
HouseNbr[i] = forloop[i];
}
else if(forloop[i+1].substring(0,1).matches(" ")){
}
else if(forloop[i].substring(0,1).matches(" ")){
}
else{
Street[i] = forloop[i];
}
}
}
for(int j = 0; j < HouseNbr.length; j++){
System.out.println(HouseNbr[j]);
}
for(int k = 0; k < Street.length; k++){
System.out.println(Street[k]);
}
}
}
任何其他想法都会非常有帮助。
【问题讨论】:
-
一些与此有些相似的问题曾经被一个非常聪明的建议回答,即使用谷歌地图 API 交叉候选地址。
-
@Leo,假设它足够快,这根本不是一个坏主意。 user311530 我相信还会有各种类型的付费服务。为什么你仍然需要这样做?数据输入是如何完成的?已验证,还是任何旧垃圾?如果你有邮编,你需要街道名称吗? (我不知道,没有做过美国地址)。在编码之前,研究一些其他的可能性,如果你需要编码,首先分析你所有的地址以获得这些数据 - 看看你可以处理什么样的百分比。
-
在一家从事商业业务的公司工作了 7 年(80 年代),我可以根据亲身经验断言这个问题没有完整的解决方案。总会有您解析错误的地址。您必须回答的问题是“您愿意为多少准确度付费?”。你可以很便宜地达到 90%,但从那时起,开发时间和特殊情况处理的成本成倍增加。如果您必须处理外国地址,您将分别为每个国家和/或地区开发逻辑。
-
幸好没有国际地址。我认为基于所有建议,我对如何攻击它有了一个很好的了解。
标签: java sql street-address