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

  ViewVC Help
Powered by ViewVC 1.1.20