java - 从数组中取出字符并将它们随机放置以创建字符串

标签 java arrays string algorithm random

我有一个 char 数组(大小为 12),看起来像这样:

{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'}  

我想创建(以最有效的方式)一个字符串,它是从数组中取出字符并随机排序的结果(让我们使用那个词),例如:

“ahbejclfkdig”

我尝试了StringBuffer和随机放置的解决方案,但存在位置重复的问题。另外,我尝试了 Collections.shuffle,但我不太了解这个。我还查看了线性反馈移位寄存器,但我认为这里不合适。这是一个非常简单的案例,我不会对大数进行操作,因此内存分配和速度应该不会引起任何重大问题。

最佳答案

您可以使用 shuffle,但将其更改为 StringBuilder。除非您必须使用旧版本的 Java,否则我不会使用 StringBuffer。

public static void main(String... args) {
    StringBuilder sb = new StringBuilder("abcdefghijkl");
    for (int i = 0; i < 5; i++) {
        shuffle(sb);
        System.out.println(sb);
    }
}


public static void shuffle(StringBuilder sb) {
    Random rand = new Random();
    for (int i = sb.length() - 1; i > 1; i--) {
        int swapWith = rand.nextInt(i);
        char tmp = sb.charAt(swapWith);
        sb.setCharAt(swapWith, sb.charAt(i));
        sb.setCharAt(i, tmp);
    }
}

打印

kbljdhieagcf
gefabkhdclij
hbkfjilcgade
eacihdkjfgbl
hbjcfegdilka

关于java - 从数组中取出字符并将它们随机放置以创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7091436/

相关文章:

arrays - 矩阵数组部分的最大和

javascript - react 突出显示和切片长文本

java - 从字符串中按名称获取变量

java - 使用HashSet进行重复检查并将其转换回List

java - 如何在代码内激活 JButton ActionListener(单元测试目的)?

java - 在 eclipse 中运行 tomcat 时,未从 WEB-INF/lib 中的 jar 文件加载 spring web 应用程序上下文

带有字符串的 Javascript 嵌套数组

java - Maven 原型(prototype) : How to add more than one archetype in same maven-plugin?

c++ - 发送输入字符串?

python - 用于在不同字符后插入空格的正则表达式