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