Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成固定长度的字母/数字字符串_Java - Fatal编程技术网

Java 生成固定长度的字母/数字字符串

Java 生成固定长度的字母/数字字符串,java,Java,我的目标是生成固定长度的迭代字母/数字字符串,例如: aaaaaa aaaaab aaaaac ... aaaaa9 aaaaba ... 999999 它可以通过嵌套for循环轻松实现,如下面的代码: public static void main(String[] strings) { Object[] array = new Object[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm

我的目标是生成固定长度的迭代字母/数字字符串,例如:

aaaaaa
aaaaab
aaaaac
...
aaaaa9
aaaaba
...
999999
它可以通过嵌套for循环轻松实现,如下面的代码:

   public static void main(String[] strings) {
        Object[] array = new Object[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
                'y', 'z', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        List<String> list = Lists.newArrayList();
        int a, b, c, d, e, f;
        for (a = 0; a < 35; a++) {
            for (b = 0; b < 35; b++) {
                for (c = 0; c < 35; c++) {
                    for (d = 0; d < 35; d++) {
                        for (e = 0; e < 35; e++) {
                            for (f = 0; f < 35; f++) {
                                list.add("" + array[a] + array[b] + array[c] + array[d] + array[e] + array[f]);
                            }
                        }
                    }
                }
            }
        }
    }
publicstaticvoidmain(String[]strings){
对象[]数组=新对象[]{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x',',
‘y’、‘z’、0、1、2、3、4、5、6、7、8、9};
List=Lists.newArrayList();
INTA、b、c、d、e、f;
对于(a=0;a<35;a++){
对于(b=0;b<35;b++){
对于(c=0;c<35;c++){
对于(d=0;d<35;d++){
对于(e=0;e<35;e++){
对于(f=0;f<35;f++){
增加(“+array[a]+array[b]+array[c]+array[d]+array[e]+array[f]);
}
}
}
}
}
}
}
但最好知道如何对其进行重构,以使其能够在多个线程中运行此类代码,甚至在已经存在的某个库中运行,从而生成此类代码


任何帮助都将不胜感激。

您正在生成35^6=1838265625个值;因此,您可以使用单个for循环重写它:

for (int i = 0; i < 1838265625; ++i) {
  int ii = i;
  int f = ii % 35; ii /= 35;
  int e = ii % 35; ii /= 35;
  int d = ii % 35; ii /= 35;
  // ...
  int a = ii % 35;

  list.add("" + array[a] + array[b] + array[c] + array[d] + array[e] + array[f]);
}

您正在生成35^6=1838265625个值;因此,您可以使用单个for循环重写它:

for (int i = 0; i < 1838265625; ++i) {
  int ii = i;
  int f = ii % 35; ii /= 35;
  int e = ii % 35; ii /= 35;
  int d = ii % 35; ii /= 35;
  // ...
  int a = ii % 35;

  list.add("" + array[a] + array[b] + array[c] + array[d] + array[e] + array[f]);
}

我认为您的代码可以转换为使用java8流的解决方案。然后,您可以简单地从基于stream()的解决方案转到parallelStream()解决方案


缺点是流只与引用类型/集合一起工作;因此,不使用原始字符数组可能会降低性能。

我认为您的代码可以转换为使用java8流的解决方案。然后,您可以简单地从基于stream()的解决方案转到parallelStream()解决方案


缺点是流只与引用类型/集合一起工作;因此,如果不使用原始字符数组,可能会降低性能。

我没有50点要评论,所以作为答案发布

为什么需要这么多嵌套循环?2个回路就足够了。计算数组的长度,将其存储在
length


for(i=0;i我没有50分要评论,所以作为答案发布

为什么需要这么多嵌套循环?2个循环就足够了。计算数组的长度,将其存储在
length

(i=0;i
  • 如果你想在六个地方得到35个字符的所有排列,我相信你会得到StackOverflowException,因为这将是一个包含1'838'265'625个条目的列表,每个条目至少有12个字节,每个字节是20GB的内存

  • 其次,使用字符数组,因为整数有4个字节,而字符只有2个(unicode)

  • 最后在连接中,int将输出框转换为整数,并尝试转换为char,我认为您将得到该int的ASCII表示(例如,1是“heading的开始”,一个非打印字符)

  • 如果你想要固定长度单词的有界随机生成器,那么你可以使用

private static final String[]数组={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”、“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”、“x”,
“y”、“z”、“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
公共列表随机词(int numOfWords,int lengthofwords){
列表=新的ArrayList();
for(int i=0;i
  • 如果你想在六个地方得到35个字符的所有排列,我相信你会得到StackOverflowException,因为这将是一个包含1'838'265'625个条目的列表,每个条目至少有12个字节,每个字节是20GB的内存

  • 其次,使用字符数组,因为整数有4个字节,而字符只有2个(unicode)

  • 最后在连接中,int将输出框转换为整数,并尝试转换为char,我认为您将得到该int的ASCII表示(例如,1是“heading的开始”,一个非打印字符)

  • 如果你想要固定长度单词的有界随机生成器,那么你可以使用

private static final String[]数组={“a”、“b”、“c”、“d”、“e”、“f”、“g”、“h”、“i”、“j”、“k”、“l”、“m”、“n”、“o”、“p”、“q”、“r”、“s”、“t”、“u”、“v”、“w”、“x”,
“y”、“z”、“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
公共列表随机词(int numOfWords,int lengthofwords){
列表=新的ArrayList();
for(int i=0;i
也许是合适的地方。你需要什么还不清楚。当你说固定长度的字符串包含字母或数字或两者?需要什么?是的,肯定可以优化,而不是5个嵌套循环'Hi Shrayas Sarvothama,谢谢你的提示问题。所以主要的想法是固定长度的字符串如示例所示。长度应等于6。字符串可以同时包含字母和数字字符。注意,最好使用字符文字,而不是混合使用类型和对象[]
char[]数组={'a','b','0','1','2','9',};
另一件事要问:你为什么要这样做
for (i=0;i<length;i++)
 {
  for(i=0;i<6;i++)
   {
       //what to do
   }
}
private static final String[] array = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x",
            "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};

public List<String> randomWords(int numOfWords, int lengthOfWord){
     List<String> list = new ArrayList<>();
     for(int i = 0; i < numberOfWords; i++)
         list.add(randomWord(lengthOfWord));

     return list;
}

private String randomWord(int lengthOfWord){
    Random rand = new Random(); 
    StringBuilder sb = new StringBuilder();
    for(int i = 0; i < lengthOfWord; i++){
        sb.append(array[rand.nextInt(35)]);
    }
    return sb.toString();
}