我正在像这样创建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);
}
注意,您不需要调用
toString
,nextToken
将返回字符串。或者,您可以使用
split
方法String[] tokens = savedString.split(",");
mListEmailAddresses = new ArrayList<String>();
mListEmailAddresses.addAll(Arrays.asList(tokens));
请注意,
StringTokenizer
状态的API文档:StringTokenizer是一个遗留类,为保持兼容性而保留
原因,尽管在新代码中不鼓励使用它。推荐
任何寻求此功能的人都使用String的split方法
或java.util.regex软件包。