如何使用java生成1000个唯一的电子邮件ID

我的要求是用Java生成1000个唯一的电子邮件ID。 我已经生成了随机文本并使用for循环我限制了要生成的电子邮件ID的数量。 问题是当我执行10个电子邮件时,生成了所有相同的电子邮件ID。

下面是代码和输出:

public static void main() { first fr = new first(); String n = fr.genText()+"@mail.com"; for (int i = 0; i<=9; i++) { System.out.println(n); } } public String genText() { String randomText = "abcdefghijklmnopqrstuvwxyz"; int length = 4; String temp = RandomStringUtils.random(length, randomText); return temp; } 

和输出是:

 myqo@mail.com myqo@mail.com ... myqo@mail.com 

当我执行相同的上述程序时,我得到另一组mail-id。 示例:代替'myqo' ,它将是'bfta' 。 但我的要求是生成不同的唯一ID。

例如:

 myqo@mail.com bfta@mail.com kjuy@mail.com 

将您的String初始化放在for语句中:

 for (int i = 0; i<=9; i++) { String n = fr.genText()+"@mail.com"; System.out.println(n); } 

我想稍微改写一下你的方法:

 public String generateEmail(String domain, int length) { return RandomStringUtils.random(length, "abcdefghijklmnopqrstuvwxyz") + "@" + domain; } 

并且可以这样称呼:

 generateEmail("gmail.com", 4); 

据我所知,您希望生成独特的1000封电子邮件 ,然后您可以通过Stream API以方便的方式执行此操作:

 Stream.generate(() -> generateEmail("gmail.com", 4)) .limit(1000) .collect(Collectors.toSet()) 

但问题仍然存在。 我故意将Stream收集到Set (删除重复项)以找出它的size() 。 如您所见,尺寸并不总是等于1000

 999 1000 997 

这意味着即使在如此小的范围内,您的算法也会返回重复值。

因此,您最好研究已编写的Java电子邮件生成器或改进自己的(例如,通过添加数字,一些特殊字符反过来会产生大量exception )。

为了保证唯一性,您可以使用计数器作为电子邮件地址的一部分:

 myqo0000@mail.com bfta0001@mail.com kjuy0002@mail.com 

如果你只想坚持字母,那么将计数器转换为基数26表示,使用’a’到’z’作为数字。

如果您计划使用MockNeat ,则已实现实现电子邮件字符串的function。

例1:

 String corpEmail = mock.emails().domain("startup.io").val(); // Possible Output: tiptoplunge@startup.io 

例2:

 String domsEmail = mock.emails().domains("abc.com", "corp.org").val(); // Possible Output: funjulius@corp.org 

注意: mock是默认的“mocking”对象 。