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

  ViewVC Help
Powered by ViewVC 1.1.20