如何从地址字符串中分离州,城市,邮政编码,国家等?

问题描述

| 我想分隔街道,城市,州,国家/地区,邮政编码
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,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
上面的代码可以很好地与String \“ Kanaka,Ranchi,zalkhand,10001,India \”一起使用 我的问题是我从xml解析格式不正确的地址字符串
ex. 1) \"Kanaka,India\"

    2) \"Ranchi,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):city = zalkhand     06-23 09:23:37.080:INFO / System.out(435):状态= 10001     06-23 09:23:37.080:INFO / System.out(435):邮政编码=印度     06-23 09:23:37.080:INFO / System.out(435):国家=
    3) \"zalkhand,India\"
    4) Kanaka zalkhand,India\" (,is missing )
像这样 那么如何分隔以上字符串呢?     

解决方法

        您可以创建一个数组,并在解析地址String之后使用StringTokenizer将令牌放入该数组中,但是通过该方法您将无法区分哪个城市或邮政编码。 这非常困难,因此请尝试使XML格式正确。例如,如果不存在City,请输入默认值,以便您可以将其用作不存在的字段。     ,        令牌和拆分是必要的,但还不够。 您的问题是,如果遇到多令牌项目,则您和您的程序都需要足够的上下文来理解一个令牌的结尾和下一个令牌的开始。 在美国,这是同样的问题。鉴于此地址:
100 Main Street San Francisco CA 09654
您的大脑有足够的背景信息来知道“旧金山”是城市,州代码是“ CA”,但是您如何告诉计算机程序如何做呢? 您需要一个解析器,该解析器对地址是什么有更多的了解。如果分隔符勾勒出每个项目的开始和结束位置,这将有所帮助,因此多令牌项目将不是问题。 您可以使用明确的令牌定界符解决此问题:
100 Main Street~San Francisco~CA~09654
在\“〜\”处拆分,一切都很好。     ,        您应该创建一个解析器,该解析器应该包含五个输入。如果缺少某些数据,则替换为null 1)“印度的卡纳卡语,兰契,扎尔肯德邦,10001” 2)null,\“ Ranchi,zalkhand,10001,印度\” //如果缺少街道 3)\“ Kanaka,null,zalkhand,10001,印度\” //如果缺少城市 将此类型的值传递给StringTokenizer。     ,        如前所述,您需要一种解析XML的正确方法,其他所有方法都将很容易。     ,        mport java.util.StringTokenizer; 导入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--------------------\");
              }
}
    }