Как отделить штат, город, почтовый индекс, страну и т. Д. От строки адреса? - PullRequest
0 голосов
/ 23 июня 2011

Я хочу отделить улицу, город, штат, страну, почтовый индекс

String = Kanaka, Ranchi, zalkhand, 10001, India

public class Test extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        StringTokenizer st = new StringTokenizer(" Kanaka, Ranchi, zalkhand, 10001, India"); 
        System.out.println("Tokens are seperated");
        int i=0;
        String street,city,state,zipcode,country;
        while(st.hasMoreTokens())
        {

                if(i==0)
                {
                        street = st.nextToken(",");
                   System.out.println("street ="+street);
                   i++;
                }
                else if(i==1)
                {
                       city = st.nextToken(",");
                        System.out.println("city= "+city);
                        i++;
                }
                else if(i==2)
                {
                       state = st.nextToken(",");
                        System.out.println("state ="+state);
                        i++;
                }
                else if(i==3)
                {
                        zipcode = st.nextToken(",");
                        System.out.println("zipcode= "+zipcode);
                            i++;
                }
                else if(i==4)
                {
                        contry = st.nextToken(",");
                        System.out.println("country= "+country);
                        i++;
                }

        }

    }
}

Вывод:

06-23 09:23:37.070: INFO/System.out(435): street = Kanaka
06-23 09:23:37.080: INFO/System.out(435): city=  Ranchi
06-23 09:23:37.080: INFO/System.out(435): state = zalkhand
06-23 09:23:37.080: INFO/System.out(435): zipcode=  10001
06-23 09:23:37.080: INFO/System.out(435): country=  India

Над кодом хорошо работает со строкой "Канака, Ранчи,zalkhand, 10001, India "

Моя проблема в том, что я анализирую строку адреса из xml, формат которой не подходит

ex. 1) "Kanaka, Ranchi, zalkhand, 10001, India"

    2) "Ranchi, zalkhand, 10001, India"   ---> kanaka(street is absent )

вывод: 06-23 09: 23: 37.070: INFO / System.out (435): улица = Ранчи 06-23 09: 23: 37.080: INFO / System.out (435): город = zalkhand 06-23 09: 23: 37.080: INFO / System.out (435): состояние = 1000106-23 09: 23: 37.080: INFO / System.out (435): почтовый индекс = Индия 06-23 09: 23: 37.080: INFO / System.out (435): страна =

    3) "zalkhand, 10001, India"
    4) Kanaka zalkhand, 10001, India" (, is missing )

как это

так как отделить строку выше?

Ответы [ 5 ]

1 голос
/ 23 июня 2011

Вы можете создать массив и после анализа адреса String поместить токены в этот массив, используя StringTokenizer. Но с помощью этого вы не сможете различить, какой это город или почтовый индекс. Это довольно сложно, поэтому постарайтесь сделать XML хорошо отформатированным. Например, если City отсутствует, введите значение по умолчанию, чтобы вы могли использовать его в качестве поля отсутствия.

1 голос
/ 23 июня 2011

Жетоны и разбиение необходимы, но не достаточны.

Ваша проблема в том, что если вы встретите элемент с несколькими токенами, вам и вашей программе потребуется достаточно контекста, чтобы понять, где заканчивается один токен и начинается следующий.

Это та же проблема здесь, в США. Учитывая этот адрес:

100 Main Street San Francisco CA 09654

У вашего мозга достаточно контекста, чтобы знать, что "Сан-Франциско" - это город, а код штата - "CA", но как вы скажете компьютерной программе, как это сделать?

Вам нужен анализатор, который лучше знает, что такое адрес. Было бы полезно, если бы разделители определяли, где начинаются и заканчиваются каждый элемент, так что элементы с несколькими токенами не будут проблемой.

Вы можете решить это с помощью четкого разделителя токенов:

100 Main Street~San Francisco~CA~09654

Разделитесь на "~" и все хорошо.

0 голосов
/ 23 июня 2011

mport java.util.StringTokenizer;

import android.app.Activity;импорт android.os.Bundle;

public class Test extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


StringTokenizer st = new StringTokenizer("koch, Ranchi, zalkhand, NY, 10001, India", ","); 
        int numberOfToken = st.countTokens();
        System.out.println("Tokens are seperated");
        int i=0;
        String address[] = new String[numberOfToken];

         String contlocation="";
         String contfirst_street="";
         String contsecond_street="";
         String contcity="";
         String contstate="";
         String contzipcode="";
         String contcountry="";


      /*  while(st.hasMoreTokens())
        {

          */      

              for(i=0;i<numberOfToken;i++)
              {
                    address[i] = st.nextToken();
                   System.out.println("address "+i+": "+address[i]);
              }

              if(numberOfToken==7)
              {

                  System.out.println("\n-------------address.length==7--------------------");

                  contlocation=address[0];
                  System.out.println("contlocation :"+contlocation);

                  contfirst_street=address[1];
                  System.out.println("contfirst_street :"+contfirst_street);

                  contsecond_street=address[2];
                  System.out.println("contsecond_street :"+contsecond_street);

                  contcity=address[3];
                  System.out.println("contcity :"+contcity);

                  contstate=address[4];
                  System.out.println("contstate :"+contstate);

                  contzipcode=address[5];
                  System.out.println("contzipcode :"+contzipcode);

                  contcountry=address[6];
                  System.out.println("contcountry :"+contcountry);

                  System.out.println("\n-------------address.length==7--------------------");
              }
              else if(numberOfToken==6)
              {
                  System.out.println("\n-------------address.length==6--------------------");

                  contlocation="";
                  System.out.println("contlocation :"+contlocation);

                  contfirst_street=address[0];
                  System.out.println("contfirst_street :"+contfirst_street);

                  contsecond_street=address[1];
                  System.out.println("contsecond_street :"+contsecond_street);

                  contcity=address[2];
                  System.out.println("contcity :"+contcity);

                  contstate=address[3];
                  System.out.println("contstate :"+contstate);

                  contzipcode=address[4];
                  System.out.println("contzipcode :"+contzipcode);

                  contcountry=address[5];
                  System.out.println("contcountry :"+contcountry);

                  System.out.println("\n-------------address.length==6--------------------");
              }
              else if(numberOfToken==5)
              {
                  System.out.println("\n-------------address.length==5--------------------");

                  contlocation="";
                  System.out.println("contlocation :"+contlocation);

                  contfirst_street=address[0];
                  System.out.println("contfirst_street :"+contfirst_street);

                  contsecond_street="";
                  System.out.println("contsecond_street :"+contsecond_street);

                  contcity=address[1];
                  System.out.println("contcity :"+contcity);

                  contstate=address[2];
                  System.out.println("contstate :"+contstate);

                  contzipcode=address[3];
                  System.out.println("contzipcode :"+contzipcode);

                  contcountry=address[4];
                  System.out.println("contcountry :"+contcountry);

                  System.out.println("\n-------------address.length==5--------------------");
              }

              else if(numberOfToken==4)
              {
                  System.out.println("\n-------------address.length==4--------------------");

                  contlocation="";
                  System.out.println("contlocation :"+contlocation);

                  contfirst_street=address[0];
                  System.out.println("contfirst_street :"+contfirst_street);

                  contsecond_street="";
                  System.out.println("contsecond_street :"+contsecond_street);

                  contcity=address[1];
                  System.out.println("contcity :"+contcity);

                  contstate=address[2];
                  System.out.println("contstate :"+contstate);

                  contzipcode="";
                  System.out.println("contzipcode :"+contzipcode);

                  contcountry=address[3];
                  System.out.println("contcountry :"+contcountry);

                  System.out.println("\n-------------address.length==4--------------------");
              }

              else if(numberOfToken==3)
              {
                  System.out.println("\n-------------address.length==3--------------------");

                  contlocation="";
                  System.out.println("contlocation :"+contlocation);

                  contfirst_street=address[0];
                  System.out.println("contfirst_street :"+contfirst_street);

                  contsecond_street="";
                  System.out.println("contsecond_street :"+contsecond_street);

                  contcity=address[1];
                  System.out.println("contcity :"+contcity);

                  contstate="";
                  System.out.println("contstate :"+contstate);

                  contzipcode="";
                  System.out.println("contzipcode :"+contzipcode);

                  contcountry=address[2];
                  System.out.println("contcountry :"+contcountry);

                  System.out.println("\n-------------address.length==3--------------------");
              }
}
    }
0 голосов
/ 23 июня 2011

Как уже говорилось, вам нужен правильный способ синтаксического анализа XML, а все остальное будет легко.

0 голосов
/ 23 июня 2011

Вы должны создать парсер, который должен принимать пять входов. и заменить ноль, если некоторые данные отсутствуют

1) "Канака, Ранчи, Залханд, 10001, Индия"

2) null, "Ranchi, zalkhand, 10001, India" // если улица отсутствует

3) "Канака, нуль, Залханд, 10001, Индия" // если город отсутствует

передать этот тип значения вашему StringTokenizer.

...