从数组中取出字符并随机放​​置以创建字符串

时间:2011-08-17 10:39:00

标签: java arrays string algorithm random

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

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

我想(以最有效的方式)创建一个String,它将从数组中获取字符并随机排序(让我们使用该单词),例如:

“ahbejclfkdig”

我尝试使用StringBuffer和随机放置的解决方案,但是存在重复位置的问题。此外,我尝试了Collections.shuffle,但我不太了解这个。我也看了线性反馈移位寄存器,但我认为这不合适。这是非常简单的情况,我不会操作大数,所以内存分配和速度不应该引起任何重大问题。

5 个答案:

答案 0 :(得分:3)

您可以使用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

答案 1 :(得分:1)

以下使用Collections.shuffle的代码可以使用:

import java.util.Arrays;
import java.util.Collections;
import java.util.List;


public class Shuffle {

  public static void main(String[] args) {
    Character[] letters = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'};
    List<Character> shuffled = Arrays.asList(letters);
    Collections.shuffle(shuffled);
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < shuffled.size(); i++) {
      sb.append(shuffled.get(i));
    }
    System.out.println(sb);     
  }

}

答案 2 :(得分:0)

您可以在Java API中查找Random类。这将使您能够创建随机数组索引。因此,您可以按随机顺序从数组中选择字符。

答案 3 :(得分:0)

String randomize(char[] letters) {
    String newString = new String[letters.length];
    for (int i = 0; i <= letters.length; i++) {
        int randomChar = Math.floor(Math.random() * letters.length);
        newString[i] = letters[randomChar];
    }
    return newString;
}

答案 4 :(得分:0)

我尝试过以下代码...我想你可以在你的场景中使用它!

String[] alphabets = new String[12];
int i = 0;
char[] arrayAlpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L'};       
for (char ch : arrayAlpha) {
   alphabets[i++] = String.valueOf(ch);
}

List<String> list = Arrays.asList(alphabets);
Collections.shuffle(list);

for (String alpha : list) {
    System.out.print(alpha + " ");
}