【问题标题】:Generate random strings with specified characters?生成具有指定字符的随机字符串?
【发布时间】:2013-03-16 20:35:38
【问题描述】:

好吧,我陷入了如何使用指定字符生成具有所有可能值的字符串的问题。 好吧,我不知道怎么解释好,这里举个例子:

字符:a, b, c

世代:

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

我尝试过使用字符列表,然后迭代该列表中的每个字符,然后再次迭代列表中的每个字符,但是......假设它不起作用。

【问题讨论】:

  • 在此处查看已接受答案中的代码:Brute Force Algorithm w/Java Passing String Error
  • 你想要一个随机字符串,还是所有可能的字符串?
  • @Arian 所有可能的字符串。
  • @jlordo 成功了,谢谢。如果您愿意,请发布答案,以便我为您投票。

标签: java string random character


【解决方案1】:

我自己在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());
        }
    }
} 

【讨论】:

    【解决方案2】:

    我很快在下面制作了这段代码。您可能需要对其进行一些编辑才能使其工作或适应您的需求我只是想与您分享我的代码的想法。但是我会推荐 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 循环来随机混合这些。祝你好运!

    【讨论】:

    • 您的意思可能是String array[] = new String[]...,但存储所有可能性似乎有点多。在这种情况下,它是 26^3。
    猜你喜欢
    • 2014-03-07
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 2011-06-30
    • 2015-07-01
    相关资源
    最近更新 更多