我正在像这样创建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个值。我应该怎么做才能解决这个问题。在我看来,代码看起来是正确的,但也许我误会了一些东西。

谢谢。

最佳答案

使用以下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软件包。

09-26 23:37
查看更多