[Schmitzm-commits] r2103 - in trunk: schmitzm-adresses/src/main/java/de/schmitzm/adresses schmitzm-adresses/src/test/java/de/schmitzm/adresses schmitzm-core/src/main/java/de/schmitzm/swing schmitzm-core/src/test/java/de/schmitzm/testing

scm-commit at wald.intevation.org scm-commit at wald.intevation.org
Tue Oct 9 11:25:48 CEST 2012


Author: alfonx
Date: 2012-10-09 11:25:48 +0200 (Tue, 09 Oct 2012)
New Revision: 2103

Modified:
   trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
   trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java
   trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ApplicationFrame.java
   trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java
Log:
Verbesserungen in getHnInterpreted

Modified: trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java
===================================================================
--- trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java	2012-10-06 18:10:52 UTC (rev 2102)
+++ trunk/schmitzm-adresses/src/main/java/de/schmitzm/adresses/AddrStringUtil.java	2012-10-09 09:25:48 UTC (rev 2103)
@@ -26,32 +26,23 @@
 public class AddrStringUtil {
 	static final private Logger log = Logger.getLogger(AddrStringUtil.class);
 
-	final static Pattern REGEX_splitHnZusatz = Pattern.compile("(\\d+)\\s*(.*?)\\s*$");
-	final static Pattern REGEX_splitFullString = Pattern
-			.compile("^(.*\\d+\\.+[^\\d]*|[^\\d,]+)"
+	final static RegexCache regexCache = RegexCache.getInstance();
+
+	final static Pattern REGEX_splitHnZusatz = regexCache.getPattern("(\\d+)\\s*(.*?)\\s*$");
+	final static Pattern REGEX_splitFullString = regexCache
+			.getPattern("^(.*\\d+\\.+[^\\d]*|[^\\d,]+)"
 					+ "\\s*"
 					+ "(\\d+|\\d+\\s*-\\s*\\d+|\\d+\\s*[,\\s*\\d+]+|\\d+\\s*[&]\\s*\\d+|\\d+\\s*bis\\s*\\d+|\\d+\\s*\\\\\\s*\\d+|\\d+\\s*[/\\s*\\d+]+)"
 					+ "\\s*" + "([^\\d].*[0][\\d]+|[^\\d]*?)" + "\\s*$");
 
-	final static Pattern REGEX_hnZusatzBereich2aBis2f = Pattern
-			.compile("(\\d+)([^\\d]?)\\s*(-|bis)\\s*(\\d*)([^\\d]?).*");
-	// final static Pattern REGEX_hnBereich = Pattern
-	// .compile("(\\d+)([^\\d]?)(\\s*)(-|bis)(\\s*)(\\w+).*");
+	final static Pattern REGEX_hnZusatzBereich2aBis2f = regexCache
+			.getPattern("(\\d+)([^\\d]?)\\s*(-|bis)\\s*(\\d*)([^\\d]?).*");
 
-	final static Pattern REGEX_hnListe = Pattern.compile("(\\d+)([^\\d]+)(\\d+).*");
+	final static Pattern REGEX_hnListe = regexCache.getPattern("(\\d+)([^\\d]+)(\\d+).*");
 
-	final static Pattern REGEX_hnEinzeln = Pattern.compile("(\\d+)(.*)");
+	final static Pattern REGEX_hnEinzeln = regexCache.getPattern("(\\d+)(.*)");
 
 	/**
-	 * Normalisiert die Schreibweise eines Straßennamens, z.B. "Dr.-Vogeler-Str." -> "drvogelerstrasse"
-	 * 
-	 * @deprecated benutzte besser {@link #normalizeStr(String)}
-	 */
-	public static final NormResult normalizeStrasse(final String strasse) {
-		return normalize(RuleRegistry.getRulesStr(), strasse);
-	}
-
-	/**
 	 * Normalisiert die Schreibweise einer Hausnummer, z.B. " 5   " -> "5"
 	 */
 	public static final String normalizeHn(String hn) {
@@ -230,22 +221,20 @@
 			// + origStrasse + " " + origHn + " " + origZusatz);
 			// return new String[] { null, splitHn[0], splitHn[1] };
 
-			Pattern p = Pattern.compile("([^\\d]*)\\s([\\d]+[^\\s]*|[\\d]+\\s+\\d+)$");
+			Pattern p = regexCache.getPattern("([^\\d]*)\\s([\\d]+[^\\s]*|[\\d]+\\s+\\d+)$");
 			m = p.matcher(zusammen);
 			if (m.find()) {
 				strasse = m.group(1);
 				hn = m.group(2);
 			} else {
-				p = Pattern.compile("(.+?)\\s([\\d]+.*)$");
-				m = p.matcher(zusammen);
+				m = regexCache.getMatcher("(.+?)\\s([\\d]+.*)$", zusammen);
 				if (m.find()) {
 					strasse = m.group(1);
 					hn = m.group(2);
 				} else {
 
 					// Wenn keine Zahl enthalten ist, dann ist alles strasse
-					p = Pattern.compile(".*\\d+.*$");
-					if (p.matcher(zusammen).find())
+					if (regexCache.matches(".*\\d+.*$", zusammen))
 						return new String[] { null, null, null, null };
 					else
 						return new String[] { zusammen, null, null, null };
@@ -271,16 +260,13 @@
 		strasse = StringUtils.trimToNull(strasse);
 		if (strasse == null || strasse.length() < 3) {
 
-			final Pattern p = Pattern.compile("(.+?)\\s([\\d]+[-]?[\\d]*)(.*)$");
-			m = p.matcher(zusammen);
+			m = regexCache.getMatcher("(.+?)\\s([\\d]+[-]?[\\d]*)(.*)$", zusammen);
 			if (m.find()) {
 				strasse = m.group(1);
 				hn = m.group(2);
 				zusatz = m.group(3);
 			} else
 				return new String[] { null, null, null, null };
-
-			// log.error("Strasse = " + strasse);
 			warn = true;
 		}
 
@@ -341,10 +327,15 @@
 		return s.trim();
 	}
 
-	// TODO sauberes rewrite unter besserer Ausnutzung von Rekursion
+	/**
+	 * Löst einen Hausnummerbereich wie z.B. 1-4 in die Strings "1", "2", "3", "4" auf.
+	 */
 	public static TreeSet<String> getHausnummernInterpreted(final String hausnummern) {
-		final TreeSet<String> result = new TreeSet<String>(new Comparator<String>() {
 
+		final TreeSet<String> result = new TreeSet<String>();
+		// Die Ergebnisliste ist numerisch sortiert:
+		final TreeSet<String> resultFinal = new TreeSet<String>(new Comparator<String>() {
+
 			@Override
 			public int compare(String o1, String o2) {
 				try {
@@ -357,19 +348,38 @@
 			}
 		});
 
-		if (hausnummern != null) {
-			final Matcher m = Pattern.compile("(\\d)+\\s*([a-z]+)[,]([a-z]+)").matcher(hausnummern);
-			if (m.find()) {
-				result.addAll(getHausnummern(m.group(1) + m.group(2)));
-				result.addAll(getHausnummern(m.group(1) + m.group(3)));
-				return result;
+		try {
+
+			if (hausnummern != null) {
+
+				// Trennung in additive Bereiche, wie "1-5 und 11-14
+				final Matcher m = regexCache.getMatcher("(\\d)+\\s*([a-z]+)[,]([a-z]+)", hausnummern);
+				if (m.find()) {
+					result.addAll(getHausnummern(m.group(1) + m.group(2)));
+					result.addAll(getHausnummern(m.group(1) + m.group(3)));
+					return result;
+				}
+
+				// Trennung in additive Bereiche, wie "1-5 und 11-14
+				final String[] splitted = hausnummern.split("(?:[,/;+]+|u\\.|und)");
+				for (final String hn : splitted) {
+					result.addAll(getHausnummern(hn));
+				}
 			}
-			final String[] splitted = hausnummern.split("[,/;]+");
-			for (final String hn : splitted) {
-				result.addAll(getHausnummern(hn));
+		} finally {
+			// Result nochmal testen auf Zahlen die zu groß sind!
+
+			for (String hn : result) {
+				Matcher m = regexCache.getMatcher("(\\d+)", hn);
+				m.find();
+				Integer hnn = Integer.parseInt(m.group(1));
+				if (hnn > 0 && hnn < 5000) {
+					resultFinal.add(hn);
+				}
 			}
 		}
-		return result;
+
+		return resultFinal;
 	}
 
 	public static List<String> getHausnummern(String hausnummerUntested) {
@@ -406,7 +416,9 @@
 			final String maxNumStr = m.group(4);
 
 			// 12-15
-			if (m.group(2).isEmpty() && !maxNumStr.isEmpty() && m.group(5).isEmpty()) {
+			// if (m.group(2).isEmpty() && !maxNumStr.isEmpty() && m.group(5).isEmpty()) {
+
+			if (!maxNumStr.isEmpty()) {
 				// Keine Zusätze in dem Bereich...
 				log.debug("Versuche Hausnummernbereich " + minNumStr + " bis " + maxNumStr + " aufzulösen...");
 				final int min = Integer.parseInt(minNumStr);
@@ -421,17 +433,16 @@
 				for (int i = min; i <= max; i++) {
 					// TODO Hier könnte man nur die geraden oder ungeraden
 					// zählen
-					result.add(Integer.toString(i));
+
+					if (i == min && !m.group(2).isEmpty())
+						result.add(Integer.toString(i) + m.group(2));
+					else if (i == max && !m.group(5).isEmpty())
+						result.add(Integer.toString(i) + m.group(5));
+					else
+						result.add(Integer.toString(i));
 				}
-			} else {
-				log.debug("Hausnummernbereich " + minNumStr + m.group(2) + " bis " + maxNumStr + m.group(5)
-						+ " kann noch nicht hochgezählt werden.");
-				if (!minNumStr.isEmpty())
-					result.add(minNumStr + m.group(2));
-				if (!maxNumStr.isEmpty())
-					result.add(maxNumStr + m.group(5));
+				return result;
 			}
-			return result;
 		}
 
 		m = REGEX_hnListe.matcher(hausnummerUntested);
@@ -445,7 +456,7 @@
 		m = REGEX_hnEinzeln.matcher(hausnummerUntested);
 		if (m.find()) {
 			String match = m.group(1);
-			match += m.group(2);
+			match += cleanHnZusatz(m.group(2));
 			result.add(match);
 			return result;
 		}
@@ -455,6 +466,13 @@
 	}
 
 	/**
+	 * Manche wenige Zeichen sind als HN-Zusatz nicht gültig und werden gelöscht.
+	 */
+	private static String cleanHnZusatz(String hnZusatz) {
+		return regexCache.replaceAll(hnZusatz, "(?:-)", "");
+	}
+
+	/**
 	 * Interpretiert eine GKZ, KKZ etc anhang Ihrer Länge und liefert ob es sich um einen KREIS oder ein BUNDESLAND
 	 * handelt
 	 * 
@@ -613,7 +631,7 @@
 		strasse = RegexCache.getInstance().replaceAll(strasse, "(\\s+/[^\\d]++)$", "");
 
 		strasse = RegexCache.getInstance().replaceAll(strasse, "\\s*\\(.*?\\)\\s*", "");
-		
+
 		strasse = RegexCache.getInstance().replaceAll(strasse, "str\\.ße", "str.");
 
 		strasse = RegexCache.getInstance().replaceAll(strasse, "\\bStr\\./hausnummer:?", "");

Modified: trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java
===================================================================
--- trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java	2012-10-06 18:10:52 UTC (rev 2102)
+++ trunk/schmitzm-adresses/src/test/java/de/schmitzm/adresses/AddrStringUtilTest.java	2012-10-09 09:25:48 UTC (rev 2103)
@@ -23,6 +23,24 @@
 
 	@Test
 	public void testGetHausnummernInterpreted() {
+		checkHausnummern("21300", null);
+
+		checkHausnummern("54a - 58", "54a", "55", "56", "57", "58");
+		checkHausnummern("2c - 6b", "2c", "3", "4", "5", "6b");
+
+		checkHausnummern("46-49 u. 53-54", "46", "47", "48", "49", "53", "54");
+		checkHausnummern("46d-49 u. 53-54e", "46d", "47", "48", "49", "53", "54e");
+
+		checkHausnummern("101/102", "101", "102");
+
+		checkHausnummern("153A  - 154", "153a", "154");
+
+		checkHausnummern("41/41a", "41", "41a");
+
+		checkHausnummern("56 a-b", "56a", "56b");
+
+		checkHausnummern("1,1a,1b", "1", "1a", "1b");
+
 		checkHausnummern("6 - 14", "6", "7", "8", "9", "10", "11", "12", "13", "14");
 
 		checkHausnummern("0175-123456789");
@@ -57,13 +75,11 @@
 		// checkHausnummern("1/73E", null);
 		checkHausnummern("999", "999");
 		// checkHausnummern("1000", null);
-		// checkHausnummern("21300", null);
 
 		// checkHausnummern("40237", "1", "3");
 
 		checkHausnummern("2 - 3", "2", "3");
 		checkHausnummern("2a", "2a");
-		// checkHausnummern("2c - 6b", "2c", "4", "6b");
 		checkHausnummern("2, 2 a, 4,", "2", "2a", "4");
 		checkHausnummern("2 a", "2a");
 		checkHausnummern("2     a", "2a");
@@ -71,15 +87,21 @@
 		checkHausnummern("9a - 10d", "10d", "9a");
 		checkHausnummern(" 2 - 4 ", "2", "3", "4");
 		checkHausnummern(" 5 bis 8 ", "5", "6", "7", "8");
+		checkHausnummern(" 5 bis 8 und 1 bis 2", "1", "2", "5", "6", "7", "8");
+		checkHausnummern(" 5-8+1-2", "1", "2", "5", "6", "7", "8");
+
 	}
 
 	private void checkHausnummern(String ist, String... soll) {
 		Set<String> check = AddrStringUtil.getHausnummernInterpreted(ist);
-		if (soll.length == 0)
-			assertEquals(0, check.size());
+		if (soll == null || soll.length == 0)
+			assertEquals("" + check, 0, check.size());
 		String[] array = check.toArray(new String[] {});
-		assertEquals(LangUtil.stringConcatWithSep(";", (String[]) soll),
-				LangUtil.stringConcatWithSep(";", (String[]) array));
+		if (array.length == 0)
+			assertTrue(soll == null || soll.length == 0);
+		else
+			assertEquals(LangUtil.stringConcatWithSep(";", (String[]) soll),
+					LangUtil.stringConcatWithSep(";", (String[]) array));
 	}
 
 	@Test
@@ -364,12 +386,12 @@
 	@Test
 	public void testSaeubereStrassenname() {
 		assertEquals("Rückertstr. 3", AddrStringUtil.saeubereStrassenname("(Gartenhaus) Rückertstr. 3"));
-		
+
 		assertEquals("Wildenbruchstr.", AddrStringUtil.saeubereStrassenname("Wildenbruchstr. /am Bastionsplatz"));
 		assertEquals("Wildenbruchstr. 11/a", AddrStringUtil.saeubereStrassenname("Wildenbruchstr. 11/a"));
-		
+
 		assertEquals("Wildkamp 93\\95", AddrStringUtil.saeubereStrassenname(" Wildkamp 93\\\\95"));
-		
+
 		assertEquals("Taubenstr. 45", AddrStringUtil.saeubereStrassenname("Taubenstraße45"));
 		assertEquals("Taubenstr. 45", AddrStringUtil.saeubereStrassenname("Taubenstr.ße 45"));
 

Modified: trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ApplicationFrame.java
===================================================================
--- trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ApplicationFrame.java	2012-10-06 18:10:52 UTC (rev 2102)
+++ trunk/schmitzm-core/src/main/java/de/schmitzm/swing/ApplicationFrame.java	2012-10-09 09:25:48 UTC (rev 2103)
@@ -6,7 +6,6 @@
 import java.awt.Cursor;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
-import java.awt.event.MouseAdapter;
 import java.awt.event.WindowEvent;
 
 import javax.swing.Action;
@@ -17,7 +16,6 @@
 import javax.swing.JFrame;
 import javax.swing.JLabel;
 import javax.swing.JMenuBar;
-import javax.swing.RootPaneContainer;
 import javax.swing.text.JTextComponent;
 
 import org.apache.commons.lang.StringUtils;

Modified: trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java
===================================================================
--- trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java	2012-10-06 18:10:52 UTC (rev 2102)
+++ trunk/schmitzm-core/src/test/java/de/schmitzm/testing/SwingUtilTest.java	2012-10-09 09:25:48 UTC (rev 2103)
@@ -15,11 +15,8 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
-import de.schmitzm.io.SMTPSettings;
-import de.schmitzm.swing.EditableComboBox;
 import de.schmitzm.swing.ExceptionDialog;
 import de.schmitzm.swing.JPanel;
-import de.schmitzm.swing.SMTPSettingsPanel;
 import de.schmitzm.swing.SwingUtil;
 import de.schmitzm.swing.input.FileInputOption;
 import de.schmitzm.swing.input.ManualInputOption;



More information about the Schmitzm-commits mailing list