我需要在一个字符串java生成随机字符时,用户点击按钮。例如:如果以cat为例,我需要显示字符串中的字符,如下所示:
CAT、ACT、TAC、TCA
提前感谢
阿斯旺
发布于 2010-08-23 14:29:32
嗨,谢谢大家,我终于找到了我的问题的解决方案。
public String RandomString(String word){
int no=word.length();
String temp="";
String temp2=null;
while(no>0){
int genNo=ran.nextInt(word.length());
if(temp2==null){
temp2=""+genNo;
temp=Character.toString(word.charAt(genNo));
no--;
}else{
if(!temp2.contains(""+genNo)){
temp2=temp2+""+genNo;
temp=temp+Character.toString(word.charAt(genNo));
no--;
}
}
}
if(!temp.equals(word)){
Log.v("check","temp2 = "+temp2);
Log.v("check","String = "+temp);
return temp;
}else{
RandomGenerate(word);
}
return null;
}发布于 2010-08-24 03:29:22
关于Fisher-Yates混洗算法
Fisher-Yates shuffle是用于混洗的标准算法。下面是伪代码:
To shuffle an array a of n elements:
for i from n - 1 downto 0 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j] and a[i]下面是一个简单的Java实现:
static String shuffled(String s) {
char[] a = s.toCharArray();
final int N = a.length;
Random r = new Random();
for (int i = N - 1; i >= 0; i--) {
int j = r.nextInt(i + 1);
swap(a, i, j);
}
return new String(a);
}
static void swap(char[] a, int i, int j) {
char t = a[i];
a[i] = a[j];
a[j] = t;
}然后你可以拥有:
String text = "stackoverflow";
for (int i = 0; i < 10; i++) {
System.out.println(shuffled(text));
}这将生成字符串"stackoverflow" (see also on ideone.com)的10次混洗。
Guava + Java集合框架替代解决方案
如果您安装了Guava library,那么这将是一个很好的解决方案。以下是关键事实:
Chars.asList(char...),它可以创建char[]的List<Character>实时视图。对返回列表的修改将影响后备数组(反之亦然,versa).java.util.Collections可以shuffle(List)然后,我们可以将两者结合起来,以获得以下干净和可读的代码:
import com.google.common.primitives.*;
import java.util.*;
public class AnagramCreator {
public static void main(String[] args) {
String text = "stackoverflow";
char[] arr = text.toCharArray();
List<Character> list = Chars.asList(arr);
for (int i = 0; i < 10; i++) {
Collections.shuffle(list);
System.out.println(new String(arr));
}
}
}上面的代码将打印"stackoverflow"的10个字形。
请注意,Guava仅用于提供char[]的List<Character>实时视图。char[]不会自动装箱为Character[] (反之亦然),否则Arrays.asList(T...)就足够了。
另请参阅
相关问题
https://stackoverflow.com/questions/3544847
复制相似问题