2013-03-16 113 views
0

好吧,我遇到了如何使用指定字符生成具有所有可能值的字符串。 好吧,我不知道怎么解释好,所以这里有一个例子:生成指定字符的随机字符串?

字符:a, b, c

代:

abc 
aab 
abb 
acc 
baa 
bbb 
bbc 
bac 
cab 
ccc 
aaa 
cbb 
caa 
ccb 
cca 
bab 
bcb 

我使用字符列表试过了,然后遍历此列表中的每个字符,然后再次遍历列表中的每个字符,但是...让我们说这是行不通的。

+0

查看在接受的答案代码在这里:[蛮力算法w/Java传递字符串错误](http://stackoverflow.com/questions/15046796/brute-force-algorithm-w-java-passing-string -error/15046867#15046867) – jlordo 2013-03-16 20:37:26

+4

你想要一个随机字符串还是所有可能的字符串? – Cephalopod 2013-03-16 20:38:11

+0

@Arian所有可能的字符串。 – BloodShura 2013-03-16 20:39:54

回答

3

从我自己的答案副本上this question

这将为a,b,c或字符的任何其他连续序列工作:

import java.util.Arrays; 
import java.util.Iterator; 

public class BruteForceIterator implements Iterator<String> { 

    private char min, max; 

    private char[] current; 

    private char[] last; 

    private int reachedLast = 0; 

    public BruteForceIterator(char min, char max, int length) { 
     this.min = min; 
     this.max = max; 
     current = new char[length]; 
     Arrays.fill(current, min); 
     last = new char[length]; 
     Arrays.fill(last, max); 
    } 

    @Override 
    public boolean hasNext() { 
     return reachedLast < 2; 
    } 

    @Override 
    public String next() { 
     String str = new String(current); 
     for(int i = current.length - 1; i >= 0; i--) { 
      char next = following(current[i]); 
      current[i] = next; 
      if (next != min) { 
       break; 
      } 
     } 
     if (Arrays.equals(current, last) || reachedLast > 0) { 
      reachedLast++; 
     } 
     return str; 
    } 

    private char following(char in) { 
     if (in < max) { 
      return (char) (in + 1); 
     } else { 
      return min; 
     } 
    } 

    @Override 
    public void remove() { 
     throw new UnsupportedOperationException("No with me, sir!"); 
    } 

    public static void main(String[] args) { 
     BruteForceIterator bit = new BruteForceIterator('a', 'c', 3); 
     while (bit.hasNext()) { 
      System.out.println(bit.next()); 
     } 
    } 
} 
1

我很快做出以下这段代码。您可能需要对其进行编辑以适应其需求或适应您的需求我只是想与您分享我的代码的想法。不过,我会建议jlordo的答案,因为它更高效。

Array String[] = new 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"} 
ArrayList<String> numbersrandom; 
for(int a = 0; i <= 26; i++){ 
for(int b = 0; i <= 26; i++){ 
for(int c = 0; i <= 26; i++){ 
numbersrandom.add(String[a]+String[b]+String[c]); 
} 
} 
} 

使用此代码后,您可以使用随机生成器和for循环来随机混合这些。祝你好运!

+0

谢谢安德烈! :D – BloodShura 2013-03-16 21:01:53

+0

你可能是指'String array [] = new String [] ...',但它似乎有点存储所有可能性。在这种情况下,它是26^3。 – jlordo 2013-03-16 21:29:20