2016-08-25 111 views
0

我的要求是在Java中生成1000个唯一的email-id。我已经生成随机文本和使用循环我限制了生成的电子邮件ID的数量。问题是,当我执行10个email-id时,它们都是相同的。如何使用java生成1000个唯一的email-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; 
} 

和输出是:

[email protected] 
[email protected] 
... 
[email protected] 

当我执行相同的上述程序,我得到另一组邮件的ID。示例:而不是'myqo'它将是'bfta'。但我的要求是生成不同的唯一ID。

例如:

[email protected] 
[email protected] 
[email protected] 

回答

3

放入for声明您String初始化:

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封电子邮件,那么你就能够通过流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)。

+0

非常感谢Andrew Tobilko ..我会按照你所说的去改变它。 –

+0

@Testadmin,加入 – Andrew

+1

不应该鼓励或帮助垃圾邮件发送者 –

0

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

实施例1:

String corpEmail = mock.emails().domain("startup.io").val(); 
// Possible Output: [email protected] 

实施例2:

String domsEmail = mock.emails().domains("abc.com", "corp.org").val(); 
// Possible Output: [email protected] 

注:mockdefault "mocking" object