我正在使用 jdk 1.6(它较旧但还可以)。我有这样的功能:
public static ArrayList gettokens(String input, String delim)
{
ArrayList tokenArray = new ArrayList();
StringTokenizer tokens = new StringTokenizer(input, delim);
while (tokens.hasMoreTokens())
{
tokenArray.add(tokens.nextToken());
}
return tokenArray;
}
我最初的意图是使用令牌来清除重复电子邮件的输入字符串(即初始)。
假设我有
input = ", email-1@email.com, email-2@email.com, email-3@email.com"; //yes with , at the beginning
delim = ";,";
当我运行上面的函数时,结果是:
[email-1@email.com, email-2@email.com, email-3@email.com]
space
这很好,但是在 and之间,
又增加了一个email
。
这是为什么?以及如何解决?
编辑:
这是打印输出的函数:
List<String> tokens = StringUtility.gettokens(email, ";,");
Set<String> emailSet = new LinkedHashSet<String>(tokens);
emails = StringUtils.join(emailSet, ", ");
呵呵,现在我看到了答案。
编辑 2 - 根本原因:
问题的根本原因是那一行代码:
emails = StringUtils.join(emailSet, ", ");
", "
加入令牌时添加了一个额外的。从上面的示例中,一个令牌看起来像这样" email-1@email.com"
,当join
应用它时,它将在令牌之前添加comma
和space
。因此,如果一个标记在字符串的开头有一个空格,那么它将在 comma 和 space 之间有两个空格。
例子:
", "
+ " email-1@email.com"
=",<space><space>email-1@email.com"