【问题标题】:How to seperate state, city, zipcode,contry etc. from address string?如何从地址字符串中分离州、城市、邮政编码、国家等?
【发布时间】:2011-06-23 09:41:39
【问题描述】:

我想区分街道、城市、州、国家、邮政编码

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

上面的代码适用于 String "Kanaka, Ranchi, 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): street = Ranchi 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): zipcode= India 06-23 09:23:37.080: INFO/System.out(435): country=

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

喜欢这个

那么如何分离上面的字符串呢?

【问题讨论】:

    标签: android string tokenize stringtokenizer


    【解决方案1】:

    您可以创建一个数组,并在解析地址字符串后使用 StringTokenizer 将令牌放入该数组中。但是通过这个您将无法区分哪个是城市或邮政编码。 这很困难,所以尝试使 XML 格式正确。比如如果 City 不存在,则放置一个默认值,以便您可以将其用作不存在的字段。

    【讨论】:

      【解决方案2】:

      令牌和拆分是必要的,但还不够。

      您的问题是,如果您遇到一个多令牌项目,您和您的程序都需要足够的上下文来了解一个令牌在哪里结束,下一个在哪里开始。

      在美国也是同样的问题。给定这个地址:

      100 Main Street San Francisco CA 09654
      

      你的大脑有足够的上下文知道“旧金山”是城市,州代码是“CA”,但是你如何告诉计算机程序怎么做呢?

      您需要一个更了解地址是什么的解析器。如果分隔符描述了每个项目的开始和结束位置,这将有所帮助,因此多令牌项目不会成为问题。

      你可以用明确的标记分隔符来解决它:

      100 Main Street~San Francisco~CA~09654
      

      在“~”处拆分,一切正常。

      【讨论】:

      • 谢谢,我知道这一点,但我无法更改来自服务器的数据,所以我无法更改服务器数据,所以请以另一种方式告诉我..
      【解决方案3】:

      您应该创建一个需要五个输入的解析器。如果缺少某些数据,则替换 null

      1) “Kanaka, Ranchi, zalkhand, 10001, India”

      2) null, "Ranchi, zalkhand, 10001, India" // 如果缺少街道

      3) "Kanaka, null, zalkhand, 10001, India" // 如果城市缺失

      将这种类型的值传递给您的 StringTokenizer。

      【讨论】:

      • 我无法替换缺失字段的空实例化,因为我在 10 个模块中使用相同的 XML,很难更改所有 20 个模块
      • 你可以使用一些特定的特殊字符来代替 null
      【解决方案4】:

      正如所指出的,您需要一种正确的方式来解析 XML,其他一切都会很容易。

      【讨论】:

        【解决方案5】:

        导入 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--------------------");
                      }
        }
            }
        

        【讨论】:

          猜你喜欢
          • 2015-04-24
          • 1970-01-01
          • 2014-01-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多