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

  ViewVC Help
Powered by ViewVC 1.1.20