Advertisement
TildePD

Master Addres

Apr 25th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.71 KB | None | 0 0
  1. package bfst19.osmdrawing;
  2.  
  3. import java.util.Arrays;
  4. import java.util.function.Consumer;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7.  
  8. public class Address {
  9.  
  10. public String street, house, postcode, city;
  11. public float lon, lat;
  12.  
  13. public Address(String _street, String _house, String _postcode, String _city, float _lon, float _lat) {
  14. street = _street;
  15. house = _house;
  16. //floor = _floor;
  17. //side = _side;
  18. postcode = _postcode;
  19. city = _city;
  20. lon = _lon;
  21. lat = _lat;
  22. }
  23.  
  24. public String toString() {
  25. return street + " " + house + ", " + "\n" + postcode + " " + city; }
  26.  
  27.  
  28. public static Address newAddress(String streetName, String houseNumber, String postcode, String city, float lon, float lat) {
  29. Builder b = new Builder();
  30.  
  31. streetName = streetName.intern();
  32. houseNumber = houseNumber.intern();
  33. postcode = postcode.intern();
  34. city = city.intern();
  35.  
  36. b.street(streetName);
  37. b.house(houseNumber);
  38. b.postcode(postcode);
  39. b.city(city);
  40. b.lon(lon);
  41. b.lat(lat);
  42. return b.build();
  43. }
  44.  
  45. public static class Builder {
  46. private String street = "Unknown", house, floor, side, postcode, city;
  47. private float lon,lat;
  48. public Builder street(String _street) { street = _street; return this; }
  49. public Builder house(String _house) { house = _house; return this; }
  50. public Builder floor(String _floor) { floor = _floor; return this; }
  51. public Builder side(String _side) { side = _side; return this; }
  52. public Builder postcode(String _postcode) { postcode = _postcode; return this; }
  53. public Builder city(String _city) { city = _city; return this; }
  54. public Builder lon(float _lon) { lon = _lon; return this; }
  55.  
  56. public Builder lat(float _lat) { lat = _lat; return this; }
  57.  
  58. public Address build() {
  59. return new Address (street, house, postcode, city, lon, lat);
  60. }
  61. }
  62.  
  63.  
  64. public String street() { return street; }
  65. public String house() { return house; }
  66. // public String floor() { return floor; }
  67. // public String side() { return side; }
  68. public String postcode() { return postcode; }
  69. public String city() { return city; }
  70. public float lon() { return lon; }
  71. public float lat() { return lat; }
  72.  
  73.  
  74. final static String[] regex = {
  75. "^ *(?<street>[A-Za-z ]+?) +(?<house>[0-9]+) *$",
  76. "^ *(?<street>[A-Za-z ]+?) +(?<house>[0-9]+)[ ,]+(?<postcode>[0-9]{4}) +(?<city>[æøåÆØÅA-Za-z ]+?) *$"
  77. };
  78.  
  79. final static Pattern[] patterns =
  80. Arrays.stream(regex).map(Pattern::compile).toArray(Pattern[]::new);
  81.  
  82. private static void tryExtract(Matcher m, String group, Consumer<String> c) {
  83. String pattern = ".*\\(\\?\\<("+group+")\\>.*";
  84. if (m.pattern().pattern().matches(pattern)) {
  85. c.accept(m.group(group));
  86. }
  87. }
  88.  
  89. public static Address parse(String s) {
  90. Builder b = new Builder();
  91. for (Pattern pattern : patterns) {
  92. Matcher match = pattern.matcher(s);
  93. if (match.matches()) {
  94. tryExtract(match, "street", b::street);
  95. tryExtract(match, "house", b::house);
  96. // tryExtract(match, "floor", b::floor);
  97. // tryExtract(match, "side", b::side);
  98. tryExtract(match, "postcode", b::postcode);
  99. tryExtract(match, "city", b::city);
  100. return b.build();
  101. }
  102. }
  103. return b.build();
  104. }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement