私は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
これは問題ありませんが、 との間,
にもう 1 つ追加されていemail
ます。
何故ですか?そしてそれを修正する方法は?
編集:
出力を出力する関数は次のとおりです。
List<String> tokens = StringUtility.gettokens(email, ";,");
Set<String> emailSet = new LinkedHashSet<String>(tokens);
emails = StringUtils.join(emailSet, ", ");
へへへ、そして今、私は答えを見ています。
編集 2 - 根本原因:
問題の根本的な原因は、次のコード行でした。
emails = StringUtils.join(emailSet, ", ");
", "
トークンを結合するときにエクストラを追加していました。上記の例から、1 つのトークンは次のよう" email-1@email.com"
になり、適用されるとトークンの前にandjoin
が追加されます。したがって、トークンの文字列の先頭にスペースがある場合、カンマとスペースの間に 2 つのスペースがあります。comma
space
例:
", "
+ " email-1@email.com"
=",<space><space>email-1@email.com"