Stringtokenizer缺少2个数组值

时间:2013-11-20 10:00:11

标签: java android stringtokenizer

我正在创建一个StringTokenizer,并使用令牌填充ArrayList

LogUtils.log("saved emails: " + savedString);
StringTokenizer st = new StringTokenizer(savedString, ",");
mListEmailAddresses = new ArrayList<String>();

for (int i = 0; i < st.countTokens(); i++) {

     String strEmail = st.nextToken().toString();
     mListEmailAddresses.add(strEmail);

}

LogUtils.log("mListEmailAddresses: emails: " + mListEmailAddresses.toString());

11-20 09:56:59.518: I/test(6794): saved emails: hdhdjdjdjd,rrfed,ggggt,tfcg,
11-20 09:56:59.518: I/test(6794): mListEmailAddresses: emails: [hdhdjdjdjd, rrfed]

正如您所看到的,mListEmailAddresses在数组末尾缺少2个值。我该怎么做才能解决这个问题。从我的眼睛看,代码看起来正确,但也许我误解了一些东西。

感谢。

3 个答案:

答案 0 :(得分:1)

使用hasMoreTokens是解决方案

 while(st.hasMoreTokens()){
         String strEmail = st.nextToken().toString();
         mListEmailAddresses.add(strEmail);
 }

答案 1 :(得分:0)

使用以下while循环

StringTokenizer st = new StringTokenizer(savedString, ",");
mListEmailAddresses = new ArrayList<String>();
while (st.hasMoreTokens()) {

     String strEmail = st.nextToken();
     mListEmailAddresses.add(strEmail);
}

注意,您无需致电toStringnextToken将返回字符串。

或者,您可以使用split方法

String[] tokens = savedString.split(",");
mListEmailAddresses = new ArrayList<String>();
mListEmailAddresses.addAll(Arrays.asList(tokens));

请注意,StringTokenizer州的API文档:

  

StringTokenizer是为保持兼容性而保留的旧类   原因虽然在新代码中不鼓励使用它。建议   任何寻求此功能的人都使用String的split方法   或者改为java.util.regex包。

答案 2 :(得分:0)

st.countTokens()方法计算在生成异常之前可以调用此tokenizer's nextToken()方法的次数。目前的立场没有提前。

要获取ArrayList中的所有元素,您应该使用以下代码

while(st.hasMoreTokens()) {
    String strEmail =  st.nextToken().toString();
    mListEmailAddresses.add(strEmail);
}