我正在创建一个类似的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个值。我该怎么办才能解决这个问题。在我看来,代码看起来是正确的,但也许我误解了什么。
谢谢。
使用hasMoreTokens
是解决方案
while(st.hasMoreTokens()){
String strEmail = st.nextToken().toString();
mListEmailAddresses.add(strEmail);
}
使用以下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包。
st.countTokens()
方法计算在生成异常之前可以调用此tokenizer's nextToken()
方法的次数。当前职位未晋升。
要获得ArrayList
中的所有元素,您应该使用以下代码
while(st.hasMoreTokens()) {
String strEmail = st.nextToken().toString();
mListEmailAddresses.add(strEmail);
}