[英]How to generate no from 1 to 1000 randomly without using random class in java?
[英]How to generate 1000 unique email-ids using java
我的要求是在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
當我執行相同的上述程序時,我會得到另一組郵件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<String>
到Set<String>
(它刪除重復項)以找出其size()
。 如您所見,大小並不總是等於1000
999
1000
997
這意味着即使在如此小的范圍內,您的算法也會返回重復的值。
因此,您最好研究已經編寫的Java電子郵件生成器,或者改進自己的電子郵件生成器(例如,通過添加數字,一些特殊字符,這些字符反過來會產生大量異常 )。
為了保證唯一性,您可以在電子郵件地址中使用計數器:
myqo0000@mail.com
bfta0001@mail.com
kjuy0002@mail.com
如果只想堅持字母,則使用“ a”至“ z”作為數字將計數器轉換為以26為基數的表示形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.