我正在编写这个算法,用随机位置的随机字母替换名称中的字母。它完成了我需要做的事情,但经过几次迭代后,它开始用1个字母替换每个字母。
例如: greg
RRER
ttet
dded
yyey
jjej
FFEF
HHEH
RRER
rrlr
rrwr
rrhr
vvwv
oowo
bbwb
yywy
mmwm
mmtm
llwl
mmwm
掌中无限
ggig
EEIE
EEIE
ffif
jjij
jjwj
bbib
ggig
ggbg
kkbk
GGAG
CCAC
hhah
CCMC
zzaz
llal
eeae
wwaw
wwpw
DDPD
ffpf
yypy
IIPI
ffsf
RRSR
SSSS
IIII
BBBB
IIII
DDDD
XXXX
SSSS
LLLL
UUUU
SSSS
我不知道为什么它在正常运作后开始这样做。任何建议都非常感谢!
private static String replaceName() {
final String alphabet = "abcdefghijklmnopqrstuvwxyz";
final int alphaNum = alphabet.length();
String newName = null;
Random r = new Random();
for (int i = 0; i < (r.nextInt(name.length()) + 1); i++) {
int replaceCharAt = r.nextInt(name.length());
newName = name.replace(name.charAt(replaceCharAt), alphabet.charAt(r.nextInt(alphaNum)));
//System.out.println(newName);
}
return newName;
}
答案 0 :(得分:1)
您的代码会执行交换位置,它会替换另一个字符的出现位置。
使用char数组
会更好char[] stringChars = yourString.toCharArray();
然后用索引替换并返回带
的字符串String result = new String(stringChars);
答案 1 :(得分:0)
您不想使用String.replace(),因为它会替换字符的所有实例。相反,我认为你应该像这样使用StringBuilder.setCharAt():
String alphabet = "abcdefghijklmnopqrstuvwxyz";
String name = "greg";
StringBuilder newName = new StringBuilder(name);
Random r = new Random();
int replaceCharAt = r.nextInt(name.length());
newName.setCharAt(replaceCharAt, alphabet.charAt(r.nextInt(alphabet.length())));
System.out.println("HERE: " + newName);