Java通过数组增加字符串

时间:2012-02-10 19:27:49

标签: java

我不知道为什么我不能在脑子里工作。

我的Java代码中有一个字符数组..

private String[] letters = { "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"
};

我需要做的是为每个可能的配置循环构建字符串。

示例:

一 AA AB AC 。 。 。 AAA AAB AAC 。 。 。 。 ABA ABC

等等n长度。

任何人都可以指出我遇到这个问题的方向。

干杯

5 个答案:

答案 0 :(得分:3)

This post在Java中实现了超集生成

答案 1 :(得分:2)

又一种递归方法。我在@liwp的另一个方向工作。有一点点优点,我只分配一个输出ArrayList。另外,为简单起见,我在这个例子中输入数字0 ... 9

static public void combos(String[] inputs, List<String> outputs, String preface, int maxDepth) {
        if (preface.length() >= maxDepth)
           return;
        for (String s : inputs) {
           // swap the order of these two lines if you want depth first
           outputs.add(preface+s);
           combos(inputs, outputs, preface+s, maxDepth);
        }       
     }


     public static void main(String[] args) {
        String[] numbers = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
        ArrayList<String> outputs = new ArrayList<String>();
        combos(numbers, outputs, "", 3);
        System.out.println(outputs);

     }

将打印出来

[0, 00, 000, 001, 002, 003, 004, 005, 006, 007, 008, 009, 01, 010, 011...

答案 2 :(得分:0)

如果您不需要很长的序列,可以使用这样的递归:

for (String letter : letters) {
    String currentSequence = start + letter;
    System.out.println(currentSequence); // do something with your data here
    if (depth > 0) {
        printCombinations(currentSequence, depth - 1);
    }
}

答案 3 :(得分:0)

This方法似乎可以设置并创建您正在寻找的组合。您需要将类添加到项目中才能创建CombinationGenerator()。

似乎没有一种方法,但至少你可以复制他们使用的方法并调用它。

String[] letters;
int[] indices;
CombinationGenerator x = new CombinationGenerator (letters.length, 3);
StringBuffer combination;
while (x.hasMore ()) {
  combination = new StringBuffer ();
  indices = x.getNext ();
  for (int i = 0; i < indices.length; i++) {
    combination.append (elements[indices[i]]);
  }
  System.out.println (combination.toString ());
}

答案 4 :(得分:0)

拯救的递归!

static List<String> permutations(int len, String[] letters) {
    List<String> ret = new ArrayList<String>();

    if (len == 1) {
        ret.addAll(Arrays.asList(letters));
    } else {
        List<String> perms =  permutations(len - 1, letters);
        for (String l : letters) {
            ret.add(l);
            for (String s : perms) {
                ret.add(l + s);
            }
        }
    }

    return ret;
}

更新:我调整了代码,以便生成1n-1个字符的排列。

请注意,输出的顺序与OP指定的顺序不同。我不希望它重要,但谁知道......

示例输出:

[0, 00, 000, 001, 002, 003, 004, 005, 006, 007, 008, 009, 01, 010, 011, ...]