2016-08-25 58 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