Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.regex.*;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- /**
- * 0: Vejnavn (Aa-Åå )+
- * 1: Husnummer [(0-9)+]
- * 2: Bogstav på nr [(Aa-Åå)]
- * 3: Etage [(0-9)+((Tt)(VHvh)||(Mm)(Ff))]
- * 4: Postnummer [(0-9)+]
- * 5: By [(Aa-Åå )+]
- */
- public class TestAddressParser {
- private HashMap<String,Pattern> patterns;
- private ArrayList<String> teststrings;
- private String[] seperators;
- public TestAddressParser() {
- patterns = new HashMap<String,Pattern>();
- teststrings = new ArrayList<String>();
- seperators = new String[]{" i "," på "};
- teststrings.add("Rued Langgaards-Vej 7, 2300 København S");
- teststrings.add("Rued Langgaards Vej 7, 5. sal, 2300 København S");
- teststrings.add("Rued Langgaards Vej 7 2300 København S");
- teststrings.add("Rued Langgaards Vej 7, 5.");
- teststrings.add("Rued Langgaards Vej 7 A København S");
- teststrings.add("Rued Langgaards Vej 7A København S");
- teststrings.add("Rued Langgaards Vej i København");
- teststrings.add("Rued Langgaards Vej 7 på 5. sal");
- teststrings.add("Rued Langgaards Vej, København S");
- teststrings.add("Rued Langgaards Vej, København S ");
- /*
- Vejnavn [#][Bogstav] [Sal]["."||"th"||"tv"] (["DK-"]Postnr||By||["DK-"]Postnr By) ["Danmark"||"Denmark"]
- Vejnavn # Bogstav | Sal | Postnr/by //Postnr altid før by, ellers får man tæv med en gummislange.
- 0: Vejnavn | # | Bogstav
- 1: Sal
- 2:
- */
- //TODO: Skriv alle regexes der hvor de skal bruges (eg. Pattern.compile(...).matcher(s);); skriv oversigt over regexes og hvad de bruges til
- // i kommentarer
- patterns.put("Road and house number with letter",Pattern.compile("[aA-zZ \\-æÆøØåÅ]+[ ]?[#]?([1-9][0-9]*[ ]?[aA-zZæÆøØåÅ]?)?"));
- patterns.put("Road name",Pattern.compile("^[aA-zZ \\-æÆøØåÅ]+"));
- patterns.put("House number",Pattern.compile("([1-9][0-9]*)"));
- patterns.put("House letter",Pattern.compile("[aA-zZæÆøØåÅ]$"));
- patterns.put("Postal code and town",Pattern.compile("([0-9]{4})?[ ]?([aA-zZ \\-æÆøØåÅ]+)?$"));
- patterns.put("Postal code",Pattern.compile("[0-9]{4}"));
- patterns.put("Town",Pattern.compile("[aA-zZ \\-æÆøØåÅ]+"));
- patterns.put("Town after seperator",Pattern.compile("[,i] [aA-zZ æÆøØåÅ]+"));
- patterns.put("Floor number",Pattern.compile("[0-9]+([\\. ]{0,2})?(th|tv|mf)?"));
- patterns.put("Number",Pattern.compile("[0-9]+"));
- //prints
- for(String s : teststrings) {
- for(String sep : seperators) s = s.replaceAll(sep,",");
- s = s.replaceAll("[ ]+"," ");
- String roadName = "", houseNumber = "", houseLetter = "", postalCode = "", town = "", floor = "";
- Matcher first = patterns.get("Road and house number with letter").matcher(s);
- if(first.find()) {
- //group 0
- String result = first.group().trim();
- Matcher matchRoadName = patterns.get("Road name").matcher(result);
- if(matchRoadName.find()) roadName = matchRoadName.group().trim();
- Matcher matchHouseNumber = patterns.get("House number").matcher(result);
- if(matchHouseNumber.find()) houseNumber = matchHouseNumber.group();
- Matcher matchHouseLetter = patterns.get("House letter").matcher(result);
- if(matchHouseLetter.find() && !houseNumber.equals("")) houseLetter = matchHouseLetter.group();
- StdOut.print("1: "+roadName+"| 2: "+houseNumber+"| 3: "+houseLetter);
- //find remaining groups //TODO: IF TOWN IS LAST (fix)
- String next = s.substring(first.end()).trim();
- //group 2
- Matcher matchPostalCodeandTown = patterns.get("Postal code and town").matcher(next);
- if(matchPostalCodeandTown.find()) {
- String s_lol = matchPostalCodeandTown.group().trim();
- Matcher matchPostalCode = patterns.get("Postal code").matcher(s_lol);
- if(matchPostalCode.find()) postalCode = matchPostalCode.group();
- Matcher matchTown = patterns.get("Town").matcher(s_lol);
- if(matchTown.find()) town = matchTown.group().trim();
- }
- StdOut.print("| 4: "+postalCode+"| 5: "+town);
- //group 1
- String finalString = next.substring(0,matchPostalCodeandTown.start()).trim();
- Matcher matchFloor = patterns.get("Floor number").matcher(finalString);
- if(matchFloor.find()) {
- Matcher matchFloorNumber = patterns.get("Number").matcher(matchFloor.group());
- if(matchFloorNumber.find()) floor = matchFloorNumber.group();
- }
- StdOut.print("| 6: "+floor);
- }
- StdOut.println();
- }
- }
- public static void main(String[] args) {
- new TestAddressParser();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment