将字符添加到字符串中

时间:2014-10-30 17:24:19

标签: java string char

import java.util.Random;

public class PasswordRandomizer {
    // Define the variables
    private Random random = new Random();
    private int passwordLength;
    private String password = "";

    public PasswordRandomizer(int length) {
        // Initialize the variable
        this.passwordLength = length;
    }

    public String createPassword() {
        // write code that returns a randomized password
        for(int i = 0; i < this.passwordLength; i++){
            int j = random.nextInt();
            char symbol = "abcdefghijklmnopqrstuvwxyz".charAt(j);
            this.password = this.password + symbol; 
        }
        return this.password;
    }
}

如何将字符添加到字符串中,我试过这个但是我收到了这个错误:

  

&#34;线程中的异常&#34; main&#34; java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-414383904&#34;。

6 个答案:

答案 0 :(得分:7)

这是因为random.nextInt()返回-2,147,483,648和2,147,483,647之间的值。

你想要的是random.nextInt("abcdefghijklmnopqrstuvwxyz".length())

我还会将"abcdefghijklmnopqrstuvwxyz"分配给常量。

private final static String ALPHABET = "abcdefghijklmnopqrstuvwxyz";

Char randomChar = ALPHABET.charAt(random.nextInt(ALPHABET.length()));

答案 1 :(得分:1)

您的问题不是连接而是随机生成器

int j = random.nextInt();
char symbol = "abcdefghijklmnopqrstuvwxyz".charAt(j);

您需要使用范围绑定的nextInt

答案 2 :(得分:1)

您正在使用Random.nextInt而没有任何约束。此方法返回2 ^ 32种可能性的任何整数。使用有界Random.nextInt("abcdefghijklmnopqrstuvwxyz".length())

答案 3 :(得分:1)

试试这个:

int j = random.nextInt(26);

可能的值将包含在0到25之间(包括在内),它将与您的字母索引相匹配。

答案 4 :(得分:1)

这是问题所在:

int j = random.nextInt();
char symbol = "abcdefghijklmnopqrstuvwxyz".charAt(j);

charAt方法要求其参数在字符串的范围内 - 您只使用Random.nextInt()中的随机整数,该整数可以包含 any {{1值:

  

从此随机数生成器的序列中返回下一个伪随机数,均匀分布的int值。 nextInt的一般契约是伪随机生成并返回一个int值。所有2 32 可能的int值都以(近似)相等的概率产生。

你应该使用类似的东西:

int

这样你知道private static String final ALPHABET = "abcdefghijklmnopqrstuvwxyz"; ... int j = random.nextInt(ALPHABET.length()); char symbol = ALPHABET.charAt(j); 将在字符串的范围内(即j)。

我的代码还有其他一些变化:

  • 此处无需使用字符串连接
  • 不需要为0 <= j < ALPHABET.length()使用实例变量(目前您生成的每个密码都会比前一个更长)
  • 我会使用最终字段
  • 我使用Random代替SecureRandom来生成密码
  • 我要上课了
  • 我允许在
  • 中传递字符字母

所以:

Random

答案 5 :(得分:0)

代码random.nextInt()创建的值大于“abcdefghijklmnopqrstuvwxyz”中字符的长度。

使用0到25之间的值。使用 random.nextInt(25); 代替random.nextInt();