如何解析geocoding geoApi (formattedAddress)一行地址格式成多个组件?


public String[] splitAddress(String address) {
String[] arrOfStr = address.split(",", 3);
if (!(address.substring(address.length() - 6).equalsIgnoreCase("sweden"))) {
return new String[]{arrOfStr[0], arrOfStr[1], null};
}
if (arrOfStr.length == 2) {
return new String[]{null, arrOfStr[0], arrOfStr[1]};
}
if (arrOfStr.length == 1) {
return new String[]{null, arrOfStr[0], null};
}

return arrOfStr;
}

static String[] splitString(String str)
{
StringBuilder alpha = new StringBuilder(),
StringBuilder num = new StringBuilder();
for (int i=0; i<str.length(); i++)
{
if (Character.isDigit(str.charAt(i)))
num.append(str.charAt(i));
else if(Character.isAlphabetic(str.charAt(i)))
alpha.append(str.charAt(i));
}
return new String[]{alpha.toString(), num.toString()};
}
String str = "vårbergvägrn 6,145 67 Norsborg,Sweden";
ParseAddress parseAddress = new ParseAddress(); // object of the class
System.out.println("Street  : " + parseAddress.splitAddress(str)[0]);
System.out.println("PostalCode  : " + ParseAddress.splitString(parseAddress.splitAddress(str)[1])[1]);
System.out.println("City  : " +  ParseAddress.splitString(parseAddress.splitAddress(str)[1])[0]);
System.out.println("Country  : " + parseAddress.splitAddress(str)[2]);
resuts
Street  : vårbergvägrn 6
PostalCode  : 14567
City  : Norsborg
Country  : Sweden

我试图解析geocoding谷歌Api (formattedAdress)一行组件(地址)在不同的领域,即街道,邮编,城市和国家(这是我们的瑞典地址格式,我们需要它的应用程序)。

作为我的实际工作和java的学生,我的导师评论了代码,它是非常硬编码和不干净。我是来寻求帮助的。我怎样才能使我的代码灵活,干净,而不是硬编码。如果你们中有人分享了一个新方法或一段代码,我们将不胜感激。

说明一下:我并没有被我的代码卡住,我只是需要把它组织得更好一点。

对任何分隔符/空格配置使用逗号(,)分隔符:

String[] parts = address.split("\s*,\s*");

这将为您提供一个String[]数组的街道,邮政编码&;城市与乡村;

将Street部分放入String变量中:

String street = parts[0];

邮政编码和城市在parts[1]的初始解析中混合在一起。这两者可以通过使用string# replaceAll()方法和几个小正则表达式(regex)轻松分离(进一步解析),例如,获得邮政编码parts[1]我们可以使用:

String postalCode = parts[1].replaceAll("\D", "");

"\D"表达式从它所使用的字符串中删除所有非数字字符。这将最终使postalCode变量保留14567

同样的想法可以在parts[1]上再次播放以获得城市名称,我们只是使用不同的正则表达式,例如:

String city = parts[1].replaceAll("\d+ ", "");

"\d+ "表达式从字符串中删除所有数字(\d+)和空白(注意表达式中的空白)。这将最终使city变量保留Norsborg

Country是由初始分割创建的数组中的最后一个元素:

String country = parts[2];

整个可以是这样的:

String address = "vårbergvägrn 6,145 67 Norsborg,Sweden";
String[] parts = address.split("\s*,\s*");
String street = parts[0];
String postalCode = parts[1].replaceAll("\D", "");
String city = parts[1].replaceAll("\d+ ", "");
String country = parts[2];

System.out.println("Street:    " + street);
System.out.println("Post Code: " + postalCode);
System.out.println("City:      " + city);
System.out.println("Country:   " + country);

如果运行,控制台窗口将显示:

Street:    vårbergvägrn 6
Post Code: 14567
City:      Norsborg
Country:   Sweden

最新更新