Wiekszosc przypadkow obsluzyem, tylko przy ostatnim wystepuje blad :(
a siedze juz ponad 2dni nad tym i bede serdecznie zobowiazany
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
class Adres_Klienta {
String kod_Pocztowy;
String miasto;
String ulica;
}
*/
public class Miejscowosci {
/**
* @param adres
* @return
*/
static Adres_Klienta formatuj_Adres(String adres) {
Adres_Klienta tmp = new Adres_Klienta();
//80-227 GDAÑSK DO STUDZIENKI 34B
//83047 PRZYWIDZ GDAÑSKA 7
//83000 PRUSZCZ GDANSKI UL. TYSIACLECIA 8
//(\d{2}-?\d{3})\s+(\w+(?:\s\w+)*)\s{4,}(\w.*)
//String REGEX_Ogolny_ADRESU = "(\\d{2}-?\\d{3})\\s+(\\w+(?:\\s\\w+)*)\\s{4,}(\\w.*)";
String REGEX_Ogolny_ADRESU = "\\d\\d-?\\d\\d\\d\\s*([A-Za-zŁłŻżÓóĘęŃÑń.]*\\s*)*.*";
String REGEX_Kod_Pocztowy = "[0-9][0-9][-][0-9][0-9][0-9].*";
String REGEX_Czy_Miasto_Dwu_Czlonowe="[A-Za-zŁłŻżÓóĘęŃÑń.]+\\s[A-Za-zŁłŻżÓóĘęŃÑń.]+.*";
String REGEX_Miasto = "[A-Za-zŁłŻżÓóĘęŃÑń]*";
String REGEX_Miasto_2Czlonowe = "[A-Za-zŁłŻżÓóĘęŃÑń]+//s[A-Za-zŁłŻżÓóĘęŃÑń]*";
//String REGEX_Ulica = "[A-Za-z]+?";
int dlugoscAdresu = adres.length();
Pattern pat_OgolnyAdres = Pattern.compile(REGEX_Ogolny_ADRESU);
Matcher mat_OgolnyAdres = pat_OgolnyAdres.matcher(adres);
//if(mat_OgolnyAdres.matches()) System.out.println("true mat");
//if(mat_OgolnyAdres.find()) System.out.println("true find");
if(!mat_OgolnyAdres.find()) {
System.out.println("true find");
tmp.kod_Pocztowy = "";
tmp.miasto ="";
tmp.ulica ="";
return tmp;
}
Pattern pat_Kod_Pocztowy = Pattern.compile(REGEX_Kod_Pocztowy);
Matcher mat_Kod_Pocztowy = pat_Kod_Pocztowy.matcher(adres);
if(mat_Kod_Pocztowy.find()) {
tmp.kod_Pocztowy = adres.substring(0, 2) + "-" + adres.substring(3, 6);
adres = adres.substring(7, dlugoscAdresu);
adres = adres.trim();
}
else {
tmp.kod_Pocztowy = adres.substring(0, 2) + "-" + adres.substring(2, 5);
adres = adres.substring(6, dlugoscAdresu);
adres = adres.trim();
}
//System.out.println("adres =" + adres);
Pattern pat_Czy_Miasto = Pattern.compile(REGEX_Czy_Miasto_Dwu_Czlonowe);
Matcher mat_Czy_Miasto_Dwu_Czlonowe = pat_Czy_Miasto.matcher(adres);
//----------------------Wzorzec miasto jednoczlonowe
Pattern pat_Miasto = Pattern.compile(REGEX_Miasto);
Matcher mat_Miasto = pat_Miasto.matcher(adres);
//----------------------Wzorzec miasto dwuczlonowe
Pattern pat_Miasto_2Czlon = Pattern.compile(REGEX_Miasto);
Matcher mat_Miasto_2Czlon = pat_Miasto_2Czlon.matcher(adres);
//if(mat_Miasto_Dwu_Czlonowe.matches()) System.out.println("miasto2czlonowe mat");
if( (mat_Czy_Miasto_Dwu_Czlonowe.find())) {
mat_Miasto_2Czlon.find();
int it = 0;
int liczba_Spacji = 0;
String miasto ="";
System.out.println("2czesciowe");
int dlugoscWzorca = (mat_Miasto_2Czlon.group()).length();
System.out.println("2-1czesciowe"+dlugoscWzorca);
miasto = adres.substring(0, dlugoscWzorca+1);
adres = adres.substring(dlugoscWzorca, (adres.length()));
adres = adres.trim();
while (adres.charAt(it) != ' ') {
miasto += adres.charAt(it);
++it;
}
tmp.miasto = miasto;
adres = adres.substring((miasto.length()), (adres.length()));
adres = adres.trim();
tmp.ulica = adres;
//System.out.println("ulica = "+tmp.ulica);
}
else if( mat_Miasto.find()){
int dlugoscWzorca = (mat_Miasto.group()).length();
System.out.println("jedno czlonowe dlugoscWzorca "+dlugoscWzorca);
tmp.miasto = mat_Miasto.group();
//System.out.println("tmpmi" + tmp.miasto);
adres = adres.substring(dlugoscWzorca, (adres.length()));
adres = adres.trim();
tmp.ulica = adres;
}
System.out.println("\nkod = "+tmp.kod_Pocztowy);
System.out.println("miasto = "+tmp.miasto);
System.out.println("ulica = "+tmp.ulica);
return tmp;
}
public static void main(String[] args) {
/*
formatuj_Adres("80-227 GDAŃSK DOSTUDZIENKI 34B");
formatuj_Adres("83047 PRZYWIDZ GDAÑSKA 7");
formatuj_Adres("83000 PRUSZCZ GDANSKI UL. TYSIACLECIA 8");
formatuj_Adres("WARSZAWA DOMANIEWSKA 47");
*/
formatuj_Adres("27-515 TARŁÓW CZEKARZEWSKA BN");
}
}
dodanie znacznika <code class="java"> - Furious Programming