/[projects]/dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressUtils.java
ViewVC logotype

Contents of /dao/DaoAdresseService/src/dk/daoas/daoadresseservice/AddressUtils.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2401 - (show annotations) (download)
Fri Feb 27 11:05:28 2015 UTC (9 years, 2 months ago) by torben
File size: 6917 byte(s)
Bedre vask vejnavn
1 package dk.daoas.daoadresseservice;
2
3 import org.apache.commons.lang3.StringUtils;
4 import org.apache.commons.lang3.text.WordUtils;
5
6 public class AddressUtils {
7
8 public static class SplitResult {
9 public String vej = "";
10 public String husnr = "";
11 public String litra = "";
12 public String etage = "";
13 public String lejlighed = "";
14 public String resten = "";
15
16 @Override
17 public String toString() {
18 return vej + " / " + husnr + " / " + litra;
19 }
20 }
21
22 public static String vaskVejnavn(String indVejnavn) {
23 StringBuilder sb = new StringBuilder();
24 char chars[] = indVejnavn.toCharArray();
25
26 for (char c: chars) {
27 if ( Character.isAlphabetic(c)) {
28 sb.append(Character.toLowerCase(c) );
29 }
30 }
31
32 return sb.toString();
33 }
34
35 public static String injectIntoBk(String bkrute, String injected) {
36 String parts[] = bkrute.split("/");
37
38 if (parts.length != 4) {
39 System.out.println(">BK " + bkrute);
40 return bkrute;
41 }
42
43 return parts[0] + "/" + parts[1] + "/" + parts[2] + "/" + injected + parts[3];
44 }
45
46
47 /*
48 * Er en 1-1 port af SplitAdresse() fra funcSplitAdresse.php
49 */
50 public static SplitResult splitAdresse(String indAdresse) {
51 indAdresse = indAdresse.trim();
52
53 SplitResult result = new SplitResult();
54
55
56 int i=0;
57 int len = indAdresse.length();
58 StringBuilder delStreng = new StringBuilder();
59
60 // ignorer blanke og komma og punktum
61 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
62 i++;
63 }
64
65
66 // alle karakterer indtil det første tal er vejnavn
67 while ((i < len) && Character.isDigit(indAdresse.charAt(i))==false ) {
68 delStreng.append( indAdresse.charAt(i) );
69 i++;
70 }
71
72
73 result.vej = delStreng.toString().toLowerCase().trim();
74 if ( result.vej.endsWith(".") || result.vej.endsWith(",")) {
75 result.vej = result.vej.substring(0, result.vej.length() - 1);
76 result.vej = result.vej.trim();
77 }
78
79 //special case - hvis strengen ender med ' nr' skal ' nr' fjernes
80 if ( result.vej.endsWith(" nr")) {
81 result.vej = result.vej.substring(0, result.vej.length() - 3);
82 }
83
84 result.vej = WordUtils.capitalize( result.vej.trim() );
85
86
87
88 // første tal er husnummer
89 delStreng = new StringBuilder();
90 while ((i < len) && Character.isDigit(indAdresse.charAt(i))==true ) {
91 delStreng.append( indAdresse.charAt(i) );
92 i++;
93 }
94 result.husnr = delStreng.toString();
95
96 // ignorer blanke og komma og punktum
97 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
98 i++;
99 }
100
101 /*
102 // hvis næste delstreng er et enkelt bogstav så er det husbogstavet
103 delStreng = new StringBuilder();
104 while (i<len && Character.isDigit(indAdresse.charAt(i))==false && indAdresse.charAt(i) == '.' && indAdresse.charAt(i) != ',' && indAdresse.charAt(i) != ' ' ) {
105 delStreng.append( indAdresse.charAt(i) );
106 i++;
107 }
108
109 System.out.println(indAdresse + " >" + delStreng + "< " +i);
110
111 if (delStreng.length() == 1) {
112
113 result.litra = delStreng.toString().toUpperCase();
114 if ( !Character.isAlphabetic(result.litra.charAt(0))) {
115 result.litra = ""; //$HusBogstav må KUN være A-Z
116 }
117 delStreng = new StringBuilder();
118
119 // ignorer blanke og komma og punktum
120 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
121 i++;
122 }
123 }
124 */
125
126 if (i>=len) //THN tilføjelse
127 return result;
128
129 if (Character.isAlphabetic(indAdresse.charAt(i) )) {
130 char current = Character.toUpperCase( indAdresse.charAt(i) );
131
132 if (current != 'Æ'&& current != 'Ø' && current != 'Å') {
133 if ( (i+1 == len ||
134 (Character.isAlphabetic(indAdresse.charAt(i+1)) == false
135 /*&& indAdresse.charAt(i+1) != '.'*/)
136 )
137 ) {
138 result.litra = "" + current;
139 i++;
140 }
141 }
142 }
143
144 // ignorer blanke og komma og punktum
145 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
146 i++;
147 }
148
149
150
151
152 // første tal er etage (eller evt. st er stuen)
153 if (delStreng.toString().toLowerCase().equals("st")) {
154 result.etage = delStreng.toString().toLowerCase();
155 }
156 else {
157 delStreng = new StringBuilder();
158 String nextTwo = StringUtils.substring(indAdresse, i, i+2).toLowerCase();
159 if ( nextTwo.equals("st") ) {
160 result.etage = nextTwo;
161 i += nextTwo.length();
162 }
163 else {
164 while ((i < len) && Character.isDigit(indAdresse.charAt(i))==true ) {
165 delStreng.append( indAdresse.charAt(i) );
166 i++;
167 }
168 result.etage = delStreng.toString();
169 }
170 }
171
172
173 // Hvis vi fandt en etage angivelse skal vi også kigge efter lejlighed/side
174 if (result.etage.length() > 0 ) {
175
176 // ignorer blanke og komma og punktum
177 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
178 i++;
179 }
180
181
182 String next = StringUtils.substring(indAdresse, i, i+3).toLowerCase();
183 // Ignorer hvis næste info er 'sal'
184 if (next.equals("sal")) {
185 i += 3;
186
187 // ignorer blanke og komma og punktum
188 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
189 i++;
190 }
191 }
192
193 next = StringUtils.substring(indAdresse, i, i+3).toLowerCase();
194 // Ignorer hvis næste info er 'dør'
195 if (next.equals("dør")) {
196 i += 3;
197
198 // ignorer blanke og komma og punktum
199 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
200 i++;
201 }
202 }
203
204 // Ignorer hvis næste info er 'lejlighed' eller 'lejl.' eller 'Lej'
205 next = StringUtils.substring(indAdresse, i, i+9).toLowerCase();
206 if (next.equals("lejlighed") ) {
207 i += 9;
208 }
209 next = StringUtils.substring(indAdresse, i, i+4).toLowerCase();
210 if (next.equals("lejl") ) {
211 i += 4;
212 }
213 next = StringUtils.substring(indAdresse, i, i+3).toLowerCase();
214 if (next.equals("lej") ) {
215 i += 3;
216 }
217
218 // ignorer blanke og komma og punktum
219 while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
220 i++;
221 }
222
223 // alle karakterer indtil det første blanke er lejlighed/side
224 delStreng = new StringBuilder();
225 while (i<len && indAdresse.charAt(i) != ' ') {
226 delStreng.append( indAdresse.charAt(i) );
227 i++;
228 }
229 result.lejlighed = delStreng.toString().toLowerCase();
230 result.lejlighed = result.lejlighed.replace(".", "");
231 }
232
233 // saml resten op (kan gøres smartere med en substr)
234 result.resten = indAdresse.substring(i).trim();
235
236 return result;
237 }
238
239 }
240
241

  ViewVC Help
Powered by ViewVC 1.1.20