Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:拆分一个字符串,考虑两个分隔字符_Java_Android_Tokenize - Fatal编程技术网

Java Android:拆分一个字符串,考虑两个分隔字符

Java Android:拆分一个字符串,考虑两个分隔字符,java,android,tokenize,Java,Android,Tokenize,我有一个包含消息的字符串。字符串如下所示: bill:hello;tom:hi;bill:how are you?;tommy:hello!; ... 我需要将字符串拆分为几个字符,分别是:和 现在,我已经在上拆分了字符串并且我可以将结果添加到列表元素中 List<Message> listMessages = new ArrayList<Message>(); StringTokenizer tokenizer = new StringTokeniz

我有一个包含消息的字符串。字符串如下所示:

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

    }
但我犯了一个错误,我不明白?

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

提前感谢您查看我的问题。

您可以使用
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个参数的its

StringTokenizer str = new StringTokenizer(test, ":;");

您可以使用
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个参数的its

StringTokenizer str = new StringTokenizer(test, ":;");


要在开始时还是在添加到列表后拆分字符串?请阅读darn文档。这就像您正在使用的标记器的javadoc的第一行…@njzk2我不明白?我试图从OP那里得到需求,以便能提供正确的答案?@smit:after。每个列表元素都有一个用户名X和一条消息Y。(X:Y;)。@smit:未定向给您,抱歉误解。我只是想说op正在使用一个函数,而没有读取文档,也没有抱怨如何做一些事情。方法文档在第一行中的状态是…你想在开始时分割字符串还是在添加到列表后分割字符串?阅读该死的文档。这就像您正在使用的标记器的javadoc的第一行…@njzk2我不明白?我试图从OP那里得到需求,以便能提供正确的答案?@smit:after。每个列表元素都有一个用户名X和一条消息Y。(X:Y;)。@smit:未定向给您,抱歉误解。我只是想说op正在使用一个函数,而没有读取文档,也没有抱怨如何做一些事情,方法文档的状态在第一行…所以在[:;]中,我们不需要像[:|]这样的OR运算符吗?为什么这么复杂?strintokenizer就是这么做的,只需要使用它properly@njzk2kewl,我不太了解StringTokenizer,也听人说使用String.split()更灵活。。无论如何,谢谢:)@njzk2直接来自StringTokenizer
的API,它将字符串分解为令牌;新代码可能应该使用拆分(字符串)。
link-->@Dennis。不,你不需要那个。这就是性格课的全部要点
[;:]
已经意味着
(:)
,然而,
[:;]
将意味着
(::[;])
所以在[:]中我们不需要像[:;]这样的OR操作符吗?为什么这么复杂?strintokenizer就是这么做的,只需要使用它properly@njzk2kewl,我不太了解StringTokenizer,也听人说使用String.split()更灵活。。无论如何,谢谢:)@njzk2直接来自StringTokenizer
的API,它将字符串分解为令牌;新代码可能应该使用拆分(字符串)。
link-->@Dennis。不,你不需要那个。这就是性格课的全部要点
[;:]
已经表示
(:|)
,而
[:|]
将表示
(:|[|]|)