Java 行为奇怪的随机字符生成器

Java 行为奇怪的随机字符生成器,java,Java,我在写这个算法,用随机位置的随机字母替换名字中的字母。它做了我需要它做的事情,但是在这个算法的两次迭代之后,它开始用1个字母替换每个字母 例如:greg 雷尔 塔特 dded yyey jjej ffef 嗯哼 雷尔 rrlr rrwr rrhr vvwv 喔 bbwb yywy 毫米波 mmtm llwl 毫米波 嗯 ggig 伊伊 伊伊 ffif jjij jjwj bbib ggig ggbg kkbk ggag ccac 啊 ccmc 扎兹 羊驼 eeae wwaw wwpw ddpd

我在写这个算法,用随机位置的随机字母替换名字中的字母。它做了我需要它做的事情,但是在这个算法的两次迭代之后,它开始用1个字母替换每个字母

例如:greg 雷尔 塔特 dded yyey jjej ffef 嗯哼 雷尔 rrlr rrwr rrhr vvwv 喔 bbwb yywy 毫米波 mmtm llwl 毫米波 嗯 ggig 伊伊 伊伊 ffif jjij jjwj bbib ggig ggbg kkbk ggag ccac 啊 ccmc 扎兹 羊驼 eeae wwaw wwpw ddpd ffpf yypy iipi ffsf rrsr ssss 三 bbbb 三 dddd xxxx ssss llll 乌乌 ssss

我不明白为什么它在正常工作后开始这样做。任何建议都将不胜感激


private静态字符串replaceName(){
最终字符串字母表=“abcdefghijklmnopqrstuvxyz”;
final int alphaNum=alphabet.length();
字符串newName=null;
随机r=新随机();
对于(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;
}

您不想使用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);

您的代码不交换位置,它用另一个字符替换一个字符

使用字符数组会更好

char[] stringChars = yourString.toCharArray();
然后替换为索引并返回一个带有

String result = new String(stringChars);

欢迎来到堆栈溢出!看起来您需要学习使用调试器。请随便吃点。如果您以后仍有问题,请随时回答一个更具体的问题。为了清楚起见,您希望以“greg”开头,并希望将greg中的每个“g”替换为另一个字母?或者你只是想用另一个字母替换其中一个“g”?我想用一个新字符替换字符串中的一个随机字母。我不希望它替换字符串中的每个字母实例。现在我才意识到.replace会替换oldCharWell,String的每一次出现。replace会用新字符替换一个字符的所有实例,所以这可能不是您想要的。还有您的行:“for(int i=0;i<(r.nextInt(name.length())+1);i++)”在1到26次之间随机运行for循环。我不确定那是你真正想要的。
String result = new String(stringChars);