gpt4 book ai didi

java - 使用 Java 打乱单词

转载 作者:搜寻专家 更新时间:2023-10-31 08:10:29 24 4
gpt4 key购买 nike

我想打乱一个字符串,让它不可读,所以想出了这个方法:

public String scrambleWord(String start_word){

char[] wordarray = start_word.toCharArray();

char[] dummywordarray = start_word.toCharArray();

Random random = new Random();

int r = random.nextInt(wordarray.length-1);
int i = 0;

int j = r+1;

while(i <= r){

dummywordarray[wordarray.length -i-1] = wordarray[i];

i++;
}


while (j <= wordarray.length -1){

dummywordarray[j-r-1] = wordarray[j];

j++;

}

String newword = String.valueOf(dummywa);



return newword;

所以我首先将字符串转换为字符数组,在我的方法中我不得不复制字符数组“dummywordarray”。通过这个算法一次,单词的每个字母都会改变位置。但它不会被打乱,因为你一眼就能把它放回原处。所以我通过该方法传递了一个少于 9 个字符的给定字符串 7 次,并且这些单词被打乱了,即不可读。但我用 30 个字符的字符串进行了尝试,经过 500 遍后我才能保证它被很好地打乱了。 500!我确定有更好的算法,我想就其中任何一个提出一些建议a) 改进这个方法或者b) 更好的方法。

最佳答案

怎么样

ArrayList<Character> chars = new ArrayList<Character>(word.length());
for ( char c : word.toCharArray() ) {
chars.add(c);
}
Collections.shuffle(chars);
char[] shuffled = new char[chars.size()];
for ( int i = 0; i < shuffled.length; i++ ) {
shuffled[i] = chars.get(i);
}
String shuffledWord = new String(shuffled);

换句话说,您可以利用现有的 java.util.Collections.shuffle(List)方法。不幸的是,您必须跳过几个环节才能使用它,因为您不能在泛型中使用原语。

编辑:

shuffle 的基本工作方式(完整解释请参阅 Javadoc)如下:

for position = last_index to first_index
let swap_pos = random number between first_index and position, inclusive
swap(swap_pos, position)

编辑2:

与 Guava 的 Chars 相比,这种方法明显不那么冗长。公用事业:

List<Character> chars = Chars.asList(word.toCharArray());
Collections.shuffle(chars);
String shuffledWord = new String(Chars.toArray(chars));

关于java - 使用 Java 打乱单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4247810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com