[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