Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package bfst19.osmdrawing;
- import java.util.Arrays;
- import java.util.function.Consumer;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- public class Address {
- public String street, house, postcode, city;
- public float lon, lat;
- public Address(String _street, String _house, String _postcode, String _city, float _lon, float _lat) {
- street = _street;
- house = _house;
- //floor = _floor;
- //side = _side;
- postcode = _postcode;
- city = _city;
- lon = _lon;
- lat = _lat;
- }
- public String toString() {
- return street + " " + house + ", " + "\n" + postcode + " " + city; }
- public static Address newAddress(String streetName, String houseNumber, String postcode, String city, float lon, float lat) {
- Builder b = new Builder();
- streetName = streetName.intern();
- houseNumber = houseNumber.intern();
- postcode = postcode.intern();
- city = city.intern();
- b.street(streetName);
- b.house(houseNumber);
- b.postcode(postcode);
- b.city(city);
- b.lon(lon);
- b.lat(lat);
- return b.build();
- }
- public static class Builder {
- private String street = "Unknown", house, floor, side, postcode, city;
- private float lon,lat;
- public Builder street(String _street) { street = _street; return this; }
- public Builder house(String _house) { house = _house; return this; }
- public Builder floor(String _floor) { floor = _floor; return this; }
- public Builder side(String _side) { side = _side; return this; }
- public Builder postcode(String _postcode) { postcode = _postcode; return this; }
- public Builder city(String _city) { city = _city; return this; }
- public Builder lon(float _lon) { lon = _lon; return this; }
- public Builder lat(float _lat) { lat = _lat; return this; }
- public Address build() {
- return new Address (street, house, postcode, city, lon, lat);
- }
- }
- public String street() { return street; }
- public String house() { return house; }
- // public String floor() { return floor; }
- // public String side() { return side; }
- public String postcode() { return postcode; }
- public String city() { return city; }
- public float lon() { return lon; }
- public float lat() { return lat; }
- final static String[] regex = {
- "^ *(?<street>[A-Za-z ]+?) +(?<house>[0-9]+) *$",
- "^ *(?<street>[A-Za-z ]+?) +(?<house>[0-9]+)[ ,]+(?<postcode>[0-9]{4}) +(?<city>[æøåÆØÅA-Za-z ]+?) *$"
- };
- final static Pattern[] patterns =
- Arrays.stream(regex).map(Pattern::compile).toArray(Pattern[]::new);
- private static void tryExtract(Matcher m, String group, Consumer<String> c) {
- String pattern = ".*\\(\\?\\<("+group+")\\>.*";
- if (m.pattern().pattern().matches(pattern)) {
- c.accept(m.group(group));
- }
- }
- public static Address parse(String s) {
- Builder b = new Builder();
- for (Pattern pattern : patterns) {
- Matcher match = pattern.matcher(s);
- if (match.matches()) {
- tryExtract(match, "street", b::street);
- tryExtract(match, "house", b::house);
- // tryExtract(match, "floor", b::floor);
- // tryExtract(match, "side", b::side);
- tryExtract(match, "postcode", b::postcode);
- tryExtract(match, "city", b::city);
- return b.build();
- }
- }
- return b.build();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement