Refactor into constants
This commit is contained in:
parent
61580f2c01
commit
ec4f545b69
|
@ -93,6 +93,11 @@ public class RandomStringUtils {
|
||||||
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1',
|
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1',
|
||||||
'2', '3', '4', '5', '6', '7', '8', '9' };
|
'2', '3', '4', '5', '6', '7', '8', '9' };
|
||||||
|
|
||||||
|
private static final int ASCII_0 = '0';
|
||||||
|
private static final int ASCII_9 = '9';
|
||||||
|
private static final int ASCII_A = 'A';
|
||||||
|
private static final int ASCII_z = 'z';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the singleton instance based on {@link ThreadLocalRandom#current()}; <b>which is not cryptographically
|
* Gets the singleton instance based on {@link ThreadLocalRandom#current()}; <b>which is not cryptographically
|
||||||
* secure</b>; use {@link #secure()} to use an algorithms/providers specified in the
|
* secure</b>; use {@link #secure()} to use an algorithms/providers specified in the
|
||||||
|
@ -279,24 +284,19 @@ public class RandomStringUtils {
|
||||||
|
|
||||||
// Optimizations and tests when chars == null and using ASCII characters (end <= 0x7f)
|
// Optimizations and tests when chars == null and using ASCII characters (end <= 0x7f)
|
||||||
if (chars == null && end <= 0x7f) {
|
if (chars == null && end <= 0x7f) {
|
||||||
final int zeroDigitAscii = 48; // '0'
|
|
||||||
final int lastDigitAscii = 57; // '9'
|
|
||||||
final int firstLetterAscii = 65; // 'A'
|
|
||||||
final int lastLetterAscii = 122; // 'z'
|
|
||||||
|
|
||||||
// Optimize generation of full alphanumerical characters
|
// Optimize generation of full alphanumerical characters
|
||||||
// Normally, we would need to pick a 7-bit integer, since gap = 'z' - '0' + 1 = 75 > 64
|
// Normally, we would need to pick a 7-bit integer, since gap = 'z' - '0' + 1 = 75 > 64
|
||||||
// In turn, this would make us reject the sampling with probability 1 - 62 / 2^7 > 1 / 2
|
// In turn, this would make us reject the sampling with probability 1 - 62 / 2^7 > 1 / 2
|
||||||
// Instead we can pick directly from the right set of 62 characters, which requires
|
// Instead we can pick directly from the right set of 62 characters, which requires
|
||||||
// picking a 6-bit integer and only rejecting with probability 2 / 64 = 1 / 32
|
// picking a 6-bit integer and only rejecting with probability 2 / 64 = 1 / 32
|
||||||
if (letters && numbers && start <= zeroDigitAscii && end >= lastLetterAscii + 1) {
|
if (letters && numbers && start <= ASCII_0 && end >= ASCII_z + 1) {
|
||||||
return random(count, 0, 0, false, false, ALPHANUMERICAL_CHARS, random);
|
return random(count, 0, 0, false, false, ALPHANUMERICAL_CHARS, random);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (numbers && end <= zeroDigitAscii || letters && end <= firstLetterAscii) {
|
if (numbers && end <= ASCII_0 || letters && end <= ASCII_A) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"Parameter end (" + end + ") must be greater then (" + zeroDigitAscii + ") for generating digits "
|
"Parameter end (" + end + ") must be greater then (" + ASCII_0 + ") for generating digits "
|
||||||
+ "or greater then (" + firstLetterAscii + ") for generating letters.");
|
+ "or greater then (" + ASCII_A + ") for generating letters.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Optimize start and end when filtering by letters and/or numbers:
|
// Optimize start and end when filtering by letters and/or numbers:
|
||||||
|
@ -308,16 +308,16 @@ public class RandomStringUtils {
|
||||||
// Note that because of the above test, we will always have start < end
|
// Note that because of the above test, we will always have start < end
|
||||||
// even after this optimization.
|
// even after this optimization.
|
||||||
if (letters && numbers) {
|
if (letters && numbers) {
|
||||||
start = Math.max(zeroDigitAscii, start);
|
start = Math.max(ASCII_0, start);
|
||||||
end = Math.min(lastLetterAscii + 1, end);
|
end = Math.min(ASCII_z + 1, end);
|
||||||
} else if (numbers) {
|
} else if (numbers) {
|
||||||
// just numbers, no letters
|
// just numbers, no letters
|
||||||
start = Math.max(zeroDigitAscii, start);
|
start = Math.max(ASCII_0, start);
|
||||||
end = Math.min(lastDigitAscii + 1, end);
|
end = Math.min(ASCII_9 + 1, end);
|
||||||
} else if (letters) {
|
} else if (letters) {
|
||||||
// just letters, no numbers
|
// just letters, no numbers
|
||||||
start = Math.max(firstLetterAscii, start);
|
start = Math.max(ASCII_A, start);
|
||||||
end = Math.min(lastLetterAscii + 1, end);
|
end = Math.min(ASCII_z + 1, end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue