我想在不使用apache类的情况下生成一个包含20个字符的随机字符串。我真的不在乎是否是字母数字。另外,我将在以后的FYI中将其转换为字节数组。
谢谢,
答案 0 :(得分:86)
你走了。只需在第一行指定要允许的字符。
char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
StringBuilder sb = new StringBuilder(20);
Random random = new Random();
for (int i = 0; i < 20; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
String output = sb.toString();
System.out.println(output);
答案 1 :(得分:11)
我会用这种方法:
String randomString(final int length) {
Random r = new Random(); // perhaps make it a class variable so you don't make a new one every time
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; i++) {
char c = (char)(r.nextInt((int)(Character.MAX_VALUE)));
sb.append(c);
}
return sb.toString();
}
如果你想要一个字节[],你可以这样做:
byte[] randomByteString(final int length) {
Random r = new Random();
byte[] result = new byte[length];
for(int i = 0; i < length; i++) {
result[i] = r.nextByte();
}
return result;
}
或者你可以这样做
byte[] randomByteString(final int length) {
Random r = new Random();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < length; i++) {
char c = (char)(r.nextInt((int)(Character.MAX_VALUE)));
sb.append(c);
}
return sb.toString().getBytes();
}
答案 2 :(得分:5)
您可以使用类java.util.Random和方法
char c = (char)(rnd.nextInt(128-32))+32
20x获取字节,您将其解释为ASCII。如果你对ASCII很好。
32是偏移量,通常可以从中打印字符。
答案 3 :(得分:3)
public String randomString(String chars, int length) {
Random rand = new Random();
StringBuilder buf = new StringBuilder();
for (int i=0; i<length; i++) {
buf.append(chars.charAt(rand.nextInt(chars.length())));
}
return buf.toString();
}