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, ""));

    }

我仍然必须这样做:才能在我的列表元素中包含两个结果字符串,并且我尝试了类似的方法:

    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

String.split(regex)您可以使用基于以下两个分隔符的拆分,而不是使用 StringTokenizer :

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 。

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