
shz.core.RandomHelp Maven / Gradle / Ivy
package shz.core;
import shz.core.constant.ArrayConstant;
import shz.core.function.CharConsumer;
import shz.core.reference.IReference;
import java.security.SecureRandom;
import java.util.Random;
public final class RandomHelp {
private RandomHelp() {
throw new IllegalStateException();
}
private static final SecureRandom rng = new SecureRandom();
public static void randomChar(CharConsumer action, int len, char[] array, Random rng) {
for (int i = 0; i < len; ++i) action.accept(array[rng.nextInt(array.length)]);
}
public static void randomChar(CharConsumer action, int len, char[] array) {
randomChar(action, len, array, rng);
}
public static void randomChar(CharConsumer action, int len, Random rng) {
randomChar(action, len, ArrayConstant.CHAR_DIGIT_ALPHABET, rng);
}
public static void randomChar(CharConsumer action, int len) {
randomChar(action, len, ArrayConstant.CHAR_DIGIT_ALPHABET, rng);
}
public static char[] randomChars(int len, char[] array, Random rng) {
if (len <= 0) return ArrayConstant.EMPTY_CHAR_ARRAY;
char[] chars = new char[len];
IReference idx = new IReference();
randomChar(c -> chars[idx.getAndIncrement()] = c, len, array, rng);
return chars;
}
public static char[] randomChars(int len, char[] array) {
return randomChars(len, array, rng);
}
public static char[] randomChars(int len, Random rng) {
return randomChars(len, ArrayConstant.CHAR_DIGIT_ALPHABET, rng);
}
public static char[] randomChars(int len) {
return randomChars(len, ArrayConstant.CHAR_DIGIT_ALPHABET, rng);
}
public static String randomString(int len, char[] array, Random rng) {
if (len <= 0) return "";
StringBuilder sb = new StringBuilder(len);
randomChar(sb::append, len, array, rng);
return sb.toString();
}
public static String randomString(int len, char[] array) {
return randomString(len, array, rng);
}
public static String randomString(int len, Random rng) {
return randomString(len, ArrayConstant.CHAR_DIGIT_ALPHABET, rng);
}
public static String randomString(int len) {
return randomString(len, ArrayConstant.CHAR_DIGIT_ALPHABET, rng);
}
public static void randomDigit(CharConsumer action, int len, int scale, Random rng) {
if (scale <= 0) {
if (len <= 0) return;
action.accept(ArrayConstant.CHAR_ARRAY_10[rng.nextInt(9) + 1]);
for (int i = 1; i < len; ++i) action.accept(ArrayConstant.CHAR_ARRAY_10[rng.nextInt(10)]);
return;
}
if (len <= 0) {
action.accept('0');
action.accept('.');
for (int i = 0; i < scale; ++i) action.accept(ArrayConstant.CHAR_ARRAY_10[rng.nextInt(10)]);
return;
}
action.accept(ArrayConstant.CHAR_ARRAY_10[rng.nextInt(9) + 1]);
for (int i = 1; i < len; ++i) action.accept(ArrayConstant.CHAR_ARRAY_10[rng.nextInt(10)]);
action.accept('.');
for (int i = 0; i < scale; ++i) action.accept(ArrayConstant.CHAR_ARRAY_10[rng.nextInt(10)]);
}
public static void randomDigit(CharConsumer action, int len, int scale) {
randomDigit(action, len, scale, rng);
}
public static char[] randomDigits(int len, int scale, Random rng) {
if (len <= 0 && scale <= 0) return ArrayConstant.EMPTY_CHAR_ARRAY;
char[] chars = new char[len];
IReference idx = new IReference();
randomDigit(c -> chars[idx.getAndIncrement()] = c, len, scale, rng);
return chars;
}
public static char[] randomDigits(int len, int scale) {
return randomDigits(len, scale, rng);
}
public static String randomDigit(int len, int scale, Random rng) {
if (len <= 0 && scale <= 0) return "";
StringBuilder sb = new StringBuilder(Math.max(len, 0) + Math.max(scale, 0) + 1);
randomDigit(sb::append, len, scale, rng);
return sb.toString();
}
public static String randomDigit(int len, int scale) {
return randomDigit(len, scale, rng);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy