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-乱数生成器 かなり弱い 線形合同式 。あなたは暗号化の必要性に言及しました。その場合、はるかに強力な 暗号的に安全な擬似乱数ジェネレータ の使用を調査することができます(例: Java.security.SecureRandom
)。
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の小さな「a」のASCII値。
public static char randomSeriesForThreeCharacter() {
Random r = new Random();
char random_3_Char = (char) (97 + r.nextInt(3));
return random_3_Char;
}
a、b、cまたはdの上記の3つの数字で、uがaからzのようなすべての文字を必要とする場合、3つの数字を25に置き換えます。
ドル を使用:
Iterable<Character> chars = $('a', 'z'); // 'a', 'b', c, d .. z
chars
を指定すると、「シャッフル」範囲の文字を作成できます。
Iterable<Character> shuffledChars = $('a', 'z').shuffle();
その後、最初のn
文字を取得すると、長さn
のランダムな文字列が取得されます。最終的なコードは次のとおりです。
public String randomString(int n) {
return $('a', 'z').shuffle().slice(n).toString();
}
NB:条件n > 0
はslice
によってチェッキングされます
編集
スティーブが正しく指摘したように、randomString
は各文字を1回しか使用しません。回避策として、m
を呼び出す前にアルファベットをshuffle
回繰り返すことができます:
public String randomStringWithRepetitions(int n) {
return $('a', 'z').repeat(10).shuffle().slice(n).toString();
}
または、アルファベットをString
として指定します。
public String randomStringFromAlphabet(String alphabet, int n) {
return $(alphabet).shuffle().slice(n).toString();
}
String s = randomStringFromAlphabet("00001111", 4);
あなたはそれを持っています。ランダムASCIIコードを自分で生成するだけです。あなたは何のためにそれが必要ですか?
Quickcheck仕様ベースのテストフレームワーク のジェネレーターを使用できます。
ランダムな文字列を作成するには、 anyString メソッドを使用します。
String x = anyString();
より制限された文字セットから、または最小/最大サイズ制限で文字列を作成できます。
通常、複数の値を使用してテストを実行します。
@Test
public void myTest() {
for (List<Integer> any : someLists(integers())) {
//A test executed with integer lists
}
}
これを試して..
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);
}
これは単純ですが、有用な発見です。 RandomCharacterという名前のクラスを定義し、特定の種類の文字をランダムに取得する5つのオーバーロードメソッドを定義します。これらのメソッドは、将来のプロジェクトで使用できます。
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');
}
}
それがどのように機能するかを示すために、175個のランダムな小文字を表示する次のテストプログラムを見てみましょう。
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にクレジットを与えています Introduction to Java Programming、Comprehensive Version、10th Edition 、 ここで、この知識をプロジェクトから引用して使用しました。
注:オーバーロードされたメソッドに慣れていない場合、一言で言えばメソッドオーバーロードは、クラスが同じ名前を持つ複数のメソッドを持つことができる機能です、引数リストが異なる場合。
"DthJwMvsTyu"のような大文字と小文字が混在するランダム文字列を生成することを提案します。
このアルゴリズムは、そのコードa-z
(97〜122)とA-Z
(65〜90)が5番目のビット(2 ^)が異なる場合に、文字のASCIIコードに基づいています。 5または1 << 5または32)。
random.nextInt(2)
:結果は0または1です。
random.nextInt(2) << 5
:結果は0または32です。
上のA
は65で、下のa
は97です。5番目のビット(32)のみに違いがあるため、ランダムな文字を生成するためにバイナリOR '|'を実行しますランダムcharCaseBit
(0または32)およびA
からZ
(65から90)のランダムコード。
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();
}
Java Randomizer classをご覧ください。 randomize(char [] array)メソッドを使用して文字をランダム化できると思います。
polygenelubricants 'answer は、Hex値のみを生成する場合にも適したソリューションです。
/** 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;
}
ランダムな英数字コードを生成するコードは次のとおりです。まず、許可された文字のストリングを、乱数に含めるものとして宣言する必要があります。また、ストリングの最大長を定義する必要があります
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));
}
ToString()メソッドを使用して、StringBuilderから文字列を取得します