0

メッセージを含む文字列があります。文字列は次のようになります。

bill:hello;tom:hi;bill:how are you?;tommy:hello!; ...

文字列をいくつかの文字列に分割する必要があり:ます;
今のところ、文字列を分割して;、リスト要素に結果を追加できました。

    List<Message> listMessages = new ArrayList<Message>();

    StringTokenizer tokenizer = new StringTokenizer(messages, ";");

    String result = null;
    String uname = "";
    String umess = "";

    while (tokenizer.hasMoreTokens()) {

        result = tokenizer.nextToken();
        listMessages.add(new Message(result, ""));

    }

:結果の 2 つの文字列をリスト要素に含めるには、まだこれを行う必要があります。そのようなことを試しました。

    List<Message> listMessages = new ArrayList<Message>();

    StringTokenizer tokenizer = new StringTokenizer(messages, ";");

    String result = null;
    String uname = "";
    String umess = "";

    while (tokenizer.hasMoreTokens()) {

        result = tokenizer.nextToken().split(":");
        uname = result[0];
        umess = result[1];
        listMessages.add(new Message(result[0], result[1]));

    }

しかし、私は理解できないこのエラーを受け取りましたか?

01-23 17:12:19.168: E/AndroidRuntime(711): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.appandroid/com.example.appandroid.ListActivity}: java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

私の問題をご覧いただきありがとうございます。

4

1 に答える 1

4

StringTokenizer を使用する代わりに、String.split(regex)以下のように 2 つの区切り文字に基づいて分割するために使用できます。

String test="this: bill:hello;tom:hi;bill:how are you?;tommy:hello!;";
String[] arr = test.split("[:;]");
for(String s: arr){
    System.out.println(s);
}

出力:

this
 bill
hello
tom
hi
bill
how are you?
tommy
hello!

編集:

@njzk2 のコメントから StringTokenizer を使用したい場合は、2 つの args を取るオーバーロードされたコンストラクターの 1 つを使用できます。

StringTokenizer str = new StringTokenizer(test, ":;");
于 2013-01-23T17:17:10.630 に答える