如何使用java生成1000个唯一的email-id

时间:2016-08-25 05:59:19

标签: java string random

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

以下是代码和输出:

WebElement el = driver.findElement(By.cssSelector("input#vendor_submit[value = 'Save']"));
((JavascriptExecutor)driver).executeScript("arguments[0].click()",  el);

,输出为:

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;
}

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

例如:

'bfta'

3 个答案:

答案 0 :(得分:3)

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<String>Set<String>(删除重复项)以查找其size()。如您所见,大小并不总是等于1000

999
1000
997

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

因此,您可以更好地研究已编写的Java电子邮件生成器或改进您自己的(例如,通过添加数字,一些特殊字符,反过来,将生成a plenty of exceptions)。

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

如果您打算使用MockNeat,则实现电子邮件字符串的功能已经实现。

示例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

注意:mockdefault "mocking" object