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

标签 java string random

我的要求是用 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 编写的电子邮件生成器或改进自己的电子邮件生成器(例如,通过添加数字、一些特殊字符,进而生成 a plenty of exceptions )。

关于java - 如何使用 java 生成 1000 个唯一的电子邮件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39137689/

相关文章:

java - 终止线程的正确方法

javascript - 根据区域设置格式化日期字符串,无需创建日期对象 (JavaScript)

java - 如何检查字符串是否匹配特定格式?

c++ - 我是否正确实现了时钟漂移?

java - JUnit:如何通过构造函数创建具有依赖注入(inject)的测试类

java - Blogger java api 仅读取最后 25 篇文章

java - 使用mockito捕获webtarget.request.put的实体参数

c++ - 在 std::string::end() 和 std::string::capacity() 之间使用缓冲区

python - pandas 创建一个包含 n 个元素的系列(顺序或 randbetween)

python - 如何从文本文件中选择随机行