是否有在Java中生成随机字符的功能?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否有在Java中生成随机字符的功能?相关的知识,希望对你有一定的参考价值。

Java是否具有生成随机字符或字符串的任何功能?或者只需选择一个随机整数并将该整数的ascii代码转换为字符?

答案

有很多方法可以做到这一点,但是,是的,它涉及生成随机int(使用例如java.util.Random.nextInt),然后使用它来映射到char。如果你有一个特定的字母表,那么这样的东西很漂亮:

    import java.util.Random;

    //...

    Random r = new Random();

    String alphabet = "123xyz";
    for (int i = 0; i < 50; i++) {
        System.out.println(alphabet.charAt(r.nextInt(alphabet.length())));
    } // prints 50 random characters from alphabet

请注意,java.util.Random实际上是基于相当弱的pseudo-random number generatorlinear congruence formula。你提到了密码学的必要性;在这种情况下,您可能想要研究使用更强大的cryptographically secure pseudorandom number generator(例如java.security.SecureRandom)。

另一答案

这是一个简单但有用的发现。它定义了一个名为RandomCharacter的类,它有5个重载方法,可以随机获取某种类型的字符。您可以在将来的项目中使用这些方法。

public String randomStringFromAlphabet(String alphabet, int n) {
    return $(alphabet).shuffle().slice(n).toString();
}

String s = randomStringFromAlphabet("00001111", 4);

为了演示它是如何工作的,让我们看看下面的测试程序,显示175个随机小写字母。

public static String generateCode() {

    String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    String fullalphabet = alphabet + alphabet.toLowerCase() + "123456789";
    Random random = new Random();

    char code = fullalphabet.charAt(random.nextInt(9));

    return Character.toString(code);

}

输出是:

public class RandomCharacter { /** Generate a random character between ch1 and ch2 */ public static char getRandomCharacter(char ch1, char ch2) { return (char) (ch1 + Math.random() * (ch2 - ch1 + 1)); } /** Generate a random lowercase letter */ public static char getRandomLowerCaseLetter() { return getRandomCharacter('a', 'z'); } /** Generate a random uppercase letter */ public static char getRandomUpperCaseLetter() { return getRandomCharacter('A', 'Z'); } /** Generate a random digit character */ public static char getRandomDigitCharacter() { return getRandomCharacter('0', '9'); } /** Generate a random character */ public static char getRandomCharacter() { return getRandomCharacter('u0000', 'uFFFF'); } }

如果你再跑一次:

public class TestRandomCharacter { /** Main method */ public static void main(String[] args) { final int NUMBER_OF_CHARS = 175; final int CHARS_PER_LINE = 25; // Print random characters between 'a' and 'z', 25 chars per line for (int i = 0; i < NUMBER_OF_CHARS; i++) { char ch = RandomCharacter.getRandomLowerCaseLetter(); if ((i + 1) % CHARS_PER_LINE == 0) System.out.println(ch); else System.out.print(ch); } } }

我赞扬了Y.Daniel Liang的书enter image description here,我在这些书中引用了这些知识并在我的项目中使用。

注意:如果您不熟悉重载的方法,简而言之,方法重载是一种允许类具有多个具有相同名称的方法的功能,如果它们的参数列表不同。

另一答案

看看Java enter image description here课程。我认为你可以使用randomize(char [] array)方法随机化一个字符。

另一答案

我建议用混合大小写生成随机字符串,如:“DthJwMvsTyu”。 当代码Introduction to Java Programming, Comprehensive Version, 10th Edition,(97到122)和Randomizer(65到90)的第5位(2 ^ 5或1 << 5或32)时,该算法基于字母的ASCII码。

a-z:结果为0或1。

A-Z:结果为0或32。

random.nextInt(2)是65,下random.nextInt(2) << 5是97.差异只在第5位(32)所以为了生成随机char我们做二进制OR'|'随机A(0或32)和随机代码从acharCaseBit(65到90)。

A
另一答案

以下是生成随机字母数字代码的代码。首先,您必须声明一串允许的字符,并将其包含在随机数中。还要定义字符串的最大长度

Z

使用toString()方法从StringBuilder获取String

另一答案

如果您只想生成十六进制值,public String fastestRandomStringWithMixedCase(int length) { Random random = new Random(); final int alphabetLength = 'Z' - 'A' + 1; StringBuilder result = new StringBuilder(length); while (result.length() < length) { final char charCaseBit = (char) (random.nextInt(2) << 5); result.append((char) (charCaseBit | ('A' + random.nextInt(alphabetLength)))); } return result.toString(); } 也是一个很好的解决方案:

 SecureRandom secureRandom = new SecureRandom();
 String CHARACTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
    StringBuilder generatedString= new StringBuilder();
    for (int i = 0; i < MAXIMUM_LENGTH; i++) {
        int randonSequence = secureRandom .nextInt(CHARACTERS.length());
        generatedString.append(CHARACTERS.charAt(randonSequence));
    }
另一答案

如果您不介意在代码中添加新库,可以使用polygenelubricants' answer生成字符(免责声明:我是作者之一)。

/** A list of all valid hexadecimal characters. */
private static char[] HEX_VALUES = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'A', 'B', 'C', 'D', 'E', 'F' };

/** Random number generator to be used to create random chars. */
private static Random RANDOM = new SecureRandom();

/**
 * Creates a number of random hexadecimal characters.
 * 
 * @param nValues the amount of characters to generate
 * 
 * @return an array containing <code>nValues</code> hex chars
 */
public static char[] createRandomHexValues(int nValues) {
    char[] ret = new char[nValues];
    for (int i = 0; i < nValues; i++) {
        ret[i] = HEX_VALUES[RANDOM.nextInt(HEX_VALUES.length)];
    }
    return ret;
}
另一答案
MockNeat

应该注意你想要的东西,假设你考虑'0,'1','2'..作为字符。

另一答案

要在a-z中生成随机字符:

Random r = new Random();
char c = (char)(r.nextInt(26) + 'a');
另一答案

您还可以使用Apache Commons项目中的RandomStringUtils:

RandomStringUtils.randomAlphabetic(stringLength);
另一答案
private static char rndChar () {
    int rnd = (int) (Math.random() * 52); // or use Random or whatever
    char base = (rnd < 26) ? 'A' : 'a';
    return (char) (base + rnd % 26);

}

生成范围a-z,A-Z中的值。

另一答案
String abc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

char letter = abc.charAt(rd.nextInt(abc.length()));

这个也适用。

另一答案

在以下97 ascii值小“a”。

public static char randomSeries

以上是关于是否有在Java中生成随机字符的功能?的主要内容,如果未能解决你的问题,请参考以下文章

在Java中生成一个随机字符串[关闭]

在java中生成随机字符串[重复]

如何在Java中生成随机字符串[重复]

如何在Java中生成随机字符串[重复]

在Java中生成随机单词?

在 Java ME/J2ME 中生成随机十六进制字符串(长度为 50)