Android Java разбито на 4 целых числа - PullRequest
0 голосов
/ 05 марта 2012

Я получаю адрес в виде «номер города почтовый индекс города» (в виде строки). Я хочу разделить улицу и номер по почтовому индексу и городу. Обычно вы можете разделить на пустое пространство. Но у некоторых названий улиц также есть пробелы, например: «Эмиль ван Эрменгемлаан». Таким образом, разделение на пробелы не вариант.

Почтовый индекс - это всегда 4 одинарных числа, например, «1234», «8560», ... И я думаю, что это вариант. Сплит по почтовому индексу. Но я не знаю, как это сделать. Любая помощь?

EDIT: Примеры:

  1. Пример 1

    "Грааф Карел де Гёделаан 1 8500 Кортрейк" => "Грааф Карел де Гёделаан 1" следующая строка "8500 Кортрейк"

  2. Пример 2

    "Reigerstraat 24 8930 Lauwe" => "Reigerstraat 24" следующая строка "8930 Lauwe"

Ответы [ 5 ]

1 голос
/ 05 марта 2012

Это пример кода, который работает для меня. Он выполняет следующие операции:

  1. Он разбивает строку на основе пробелов, и каждый элемент сохраняется в массиве строк;
  2. Проверяет размер каждого элемента массива;
  3. Если размер == 4 (количество символов почтового индекса), то он проверяет (с шаблоном), является ли текущий элемент числом;
  4. Если текущий элемент является числом, то этот элемент и следующий элемент (город) сохраняются в ArrayList .

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    import java.util.*; 
    public class split{
    
     private List<String> newline = new ArrayList<String>();
    
        public split(){
            String myString = "Graaf Karel De Goedelaan 1 8500 Kortrijk";
            String array[] = myString.split("\\s+");
    
            for(int z = 0;z<arr.length;z++){
    
                int sizestr = array[z].length();
    
                if(sizestr==4){/* if the generic string has 4 characters */
                    String expression = "[0-9]*";
                    CharSequence inputStr = array[z];  
                        Pattern pattern = Pattern.compile(expression);  
                        Matcher matcher = pattern.matcher(inputStr);  
                        if(matcher.matches()){/* then if the string has 4 numbers, we have the postal code" */  
                                newline.add(array[z]); /* now we add the postal code and the next element to an array list" */
                                newline.add(array[z+1]);
                    }
                }
    
            }
    
            Iterator<String> itr = newline.iterator();
                while (itr.hasNext()) {
                    String element = itr.next();
                    System.out.println(element);
                    /* prints "8500" and "Kortrijk" */
                }
        }
    
        public static void main(String args[]){
            split s = new split();
        }
    }
    

Дополнительную информацию о проверке строки смотрите на этой странице , а для итератора ArrayList см. this .

Надеюсь, это поможет решить вашу проблему.

1 голос
/ 05 марта 2012
String input = "Graaf Karel De Goedelaan 1 8500 Kortrijk";
String[] results = input.split("([0-9]{4})");
String road = results[0].trim();
String city = results[1].trim();
String postcode = "";
Pattern p = Pattern.compile("([0-9]{4})");
Matcher m = p.matcher(input);
while(m.find()) {
    postcode = m.group(1);
}
System.out.println(input);
System.out.println("Road: " + road);
System.out.println("Postcode: " + postcode);
System.out.println("City: " + city);

Дает:
Грааф Карел Де Гёделаан 1 8500 Кортрейк
Дорога: Грааф Карел Де Геделаан 1
Почтовый индекс: 8500
Город: Кортрейк

И
Reigerstraat 24 8930 Lauwe
Дорога: Рейгерстраат 24
Почтовый индекс: 8930
Город: Lauwe

1 голос
/ 05 марта 2012

Это что-то непроверенное. Я создал его на лету, могут быть некоторые ошибки, но общая идея должна соответствовать.

String s = "Graaf Karel De Goedelaan 1 8500 Kortrijk";

Pattern p = Pattern.compile("{4}[0-9]");
Matcher m = p.matcher(s);
while(m.find){
    String postcode = m.group(1);
}

// splits around postcode
String[] split = s.split({4}[0-9]);

p = Patter.compile("\D"); //non-digit
m = p.matcher(split[0]);
while(m.find){
    String street = m.group(1);
}


p = Patter.compile("\d"); //digit
m = p.matcher(split[0]);
while(m.find){
    String streetnumber = m.group(1);
}

String city = split[1].substring(1);
0 голосов
/ 05 марта 2012

попробуйте команду split при разборе шаблона ",", тогда вам останется только parseInt

0 голосов
/ 05 марта 2012

Попробуйте использовать анализатор адресов JGeocoder .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...