All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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