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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2403 - (hide annotations) (download)
Fri Feb 27 11:40:08 2015 UTC (9 years, 3 months ago) by torben
File size: 7367 byte(s)
Gør vask endnu bedre
1 torben 2267 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 torben 2386
16     @Override
17     public String toString() {
18     return vej + " / " + husnr + " / " + litra;
19     }
20 torben 2267 }
21    
22 torben 2403 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 torben 2267 public static String vaskVejnavn(String indVejnavn) {
53 torben 2401 StringBuilder sb = new StringBuilder();
54     char chars[] = indVejnavn.toCharArray();
55 torben 2267
56 torben 2403 for (char c: chars) {
57 torben 2401 if ( Character.isAlphabetic(c)) {
58 torben 2403 c = Character.toLowerCase(c);
59     c = fjernAccentTegn(c);
60    
61     sb.append( c );
62 torben 2401 }
63     }
64 torben 2386
65 torben 2401 return sb.toString();
66 torben 2267 }
67    
68 torben 2276 public static String injectIntoBk(String bkrute, String injected) {
69     String parts[] = bkrute.split("/");
70 torben 2283
71     if (parts.length != 4) {
72     System.out.println(">BK " + bkrute);
73     return bkrute;
74     }
75    
76 torben 2276 return parts[0] + "/" + parts[1] + "/" + parts[2] + "/" + injected + parts[3];
77     }
78    
79 torben 2267
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 torben 2399
106 torben 2398 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 torben 2399 result.vej = result.vej.trim();
110     }
111    
112     //special case - hvis strengen ender med ' nr' skal ' nr' fjernes
113 torben 2398 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 torben 2267
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 torben 2387 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 torben 2273 }
175 torben 2267 }
176    
177 torben 2387 // ignorer blanke og komma og punktum
178     while (i<len && (indAdresse.charAt(i) == '.' || indAdresse.charAt(i) == ',' || indAdresse.charAt(i) == ' ') ) {
179     i++;
180     }
181    
182 torben 2267
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 torben 2273 result.resten = indAdresse.substring(i).trim();
268 torben 2267
269     return result;
270     }
271    
272     }
273    
274    

  ViewVC Help
Powered by ViewVC 1.1.20