字符串替换不适用于for循环 - Java

时间:2014-10-05 17:39:18

标签: java random char

由于某些原因,此代码无效。

public void actionPerformed(ActionEvent e) {

            Random random = new Random();
            int randomChar = random.nextInt((23 - 0) + 1);
            for(int x = 23;x > 0;x-- ) {

                String text;
                text = original.getText();
                text = text.toLowerCase();
                text = text.replace(alphabet[x], alphabet[randomChar]);

                newText.setText(text);

            }

只是为了清除原始内容和newText是JTextField,而alphabet是带有-z的char数组。

现在,当我运行它时,它应该通过一个随机的字符替换每个字符,从Z开始到A结束但是它只是给我完全相同的字符串,我只是转换为小写。

值得注意的是,如果我更换

text = text.replace(alphabet[x], alphabet[randomChar]);

使用

text = text.replace(alphabet[0], alphabet[randomChar]);

将一堆A放入输入框,它确实将它们改成随机字母。 EG:

aaaa input
llll output
or gggg output
如果我有一个变量,它就不起作用。

顺便说一下,其余的代码并不重要,它都是声明变量并设置GUI。

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

除了在循环内移动随机字符生成(如@CIsForCoocckies所建议),您还需要在循环外移动getText()setText()调用(因为每个在循环运行的时间,你从原始文本开始,所以最多一种类型的字符最终将被替换,无论循环迭代多少次。

答案 1 :(得分:1)

你的randomchar在循环之前用一些char设置然后所有的chars被替换为所谓的char所以 - " yourstring"成为" xxxxxxxxxx"其中x = randomchar

答案 2 :(得分:0)

除了另外两个答案,我还想在for循环中添加评论:

for(int x = 23;x > 0;x--)

当x == 0时,你不会进入循环,这意味着你的字母数组中的第一个字符不会被考虑替换。

如果您已经拥有字母数组,并希望用随机字符替换每个字符,为什么不考虑使用:

for (int x = 0; x < alphabet.length; x++){
  //your code here
}

这应该比硬编码更好