随机字符生成器表现奇怪

时间:2017-09-27 20:27:14

标签: java

我正在编写这个算法,用随机位置的随机字母替换名称中的字母。它完成了我需要做的事情,但经过几次迭代后,它开始用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;

        }

2 个答案:

答案 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);