首页 > 解决方案 > Java生成词表

问题描述

我在这个主题上停留了大约 3 天,我想不出一个合适的算法。所以你们能帮帮我吗?

我想生成具有给定字符集最小最大长度的词表

给定charset:abcdef min:2 max:5

结果:

aa
ab
ac
...
ffffd
ffffe
fffff

像 linux 命令行crunch

但是有一点,我需要在 for 循环中进行此操作,这与循环次数无关,但在不调用任何用户自定义函数的情况下很重要*.

喜欢:

for (...) {

   // Password is ready!
   pass = ...;

}

不喜欢:


pass = get_pass(...);

谢谢你。

标签: javaandroidpermutation

解决方案


一种方法是使用一个库,它从给定的正则表达式(如Generex)创建字符串。使用 Generex,您的任务很简单:

import com.mifmif.common.regex.Generex;

public class Example {

    public static void main(String[] args) {
        Generex gen = new Generex("[abcdef]{2,5}");
        gen.getAllMatchedStrings().forEach(System.out::println);
    }
} 

输出:

aa
aaa
aaaa
aaaaa
aaaab
aaaac
aaaad
aaaae
aaaaf
...
...
ffffa
ffffb
ffffc
ffffd
ffffe
fffff

请参阅此帖子以了解其他库,例如generex using-regex-to-generate-strings-rather-than-match-them


推荐阅读