0

番地、都市、州、国、郵便番号を分けたい

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

上記のコードは、文字列 "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): 通り = ランチ 06-23 09:23:37.080: INFO/System.out(435): 市= zalkhand 06-23 09:23 :37.080: INFO/System.out(435): 状態 = 10001 06-23 09:23:37.080: INFO/System.out(435): zipcode= インド 06-23 09:23:37.080: INFO/System.out (435): 国=

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

このような

では、上記の文字列を分離する方法は?

4

5 に答える 5

1

配列を作成し、アドレス文字列を解析した後、StringTokenizer を使用してその配列にトークンを配置できます。ただし、これを使用すると、どちらが都市か郵便番号かを区別できなくなります。これは非常に難しいので、XML を適切にフォーマットするようにしてください。たとえば、City が存在しない場合はデフォルト値を入力して、不在フィールドとして使用できるようにします。

于 2011-06-23T09:46:17.547 に答える
1

トークンと分割は必要ですが、十分ではありません。

問題は、マルチトークン項目に遭遇した場合、あなたとあなたのプログラムの両方が、あるトークンがどこで終わり、次のトークンが始まるかを理解するのに十分なコンテキストを必要とすることです.

ここアメリカでも同じ問題です。この住所を考えると:

100 Main Street San Francisco CA 09654

あなたの脳は、「サンフランシスコ」が都市であり、州コードが「CA」であることを知るのに十分なコンテキストを持っていますが、コンピューター プログラムにその方法をどのように伝えるのでしょうか?

アドレスとは何かをより深く理解できるパーサーが必要です。各アイテムの開始位置と終了位置がセパレーターで区切られていれば、マルチトークンのアイテムは問題にならないでしょう。

明確なトークン区切り文字で解決できます。

100 Main Street~San Francisco~CA~09654

「~」で割ればOKです。

于 2011-06-23T09:44:45.777 に答える
0

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--------------------");
              }
}
    }
于 2011-06-23T13:28:01.527 に答える
0

指摘したように、XML を正しく解析する方法が必要であり、それ以外はすべて簡単です。

于 2011-06-23T10:38:21.153 に答える
0

5 つの入力を受け取るパーサーを作成する必要があります。一部のデータが欠落している場合は null を置き換えます

1) 「カナカ、ランチ、ザルカンド、10001、インド」

2) null, "Ranchi, zalkhand, 10001, India" // 通りがない場合

3) "Kanaka, null, zalkhand, 10001, India" // 都市がない場合

このタイプの値を StringTokenizer に渡します。

于 2011-06-23T10:02:07.717 に答える