如何在 Java 中生成以特定字符串开头的顺序字母数字字符串
How to generate sequential alphanumeric string in Java starting with specific string
我希望能够生成给定长度 8 的连续字母数字字符串。此外,我希望字符串以特定字符串开头,比方说“ABC00”。想象一下车牌以特定字符串和其他生成的字母数字字符串开头。我已经尝试了很多我在这里看到的东西,但没有得到想要的结果。
这是我目前拥有的
import java.security.SecureRandom;
import java.util.Random;
public class RandomString {
static final String AB = "SCV00" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static SecureRandom rnd = new SecureRandom();
String randomString(int len){
StringBuilder sb = new StringBuilder(len);
for(int i = 0; i < len; i++)
sb.append(AB.charAt(rnd.nextInt(AB.length())));
return sb.toString();
}
}
我希望我的输出看起来像这样。当用户提供他们想要的 ID 数量时,我应该能够生成它。比如说,用户想要 3 个 ID。我应该。所以,我只是正确地阅读了要求,并且存在细微差别。
小写字母将被淘汰。这就是格式的样子。起始字符串是“CLV0”。
CLVO 0001
CLV0 0002
CLV0 0003
:
CLV0 0009
CLV0 000A
CLVO 000B
:
CLV0 000Z
CLV0 0010
这是实际顺序。这不是随机的。请帮忙解决这个问题
您可以在此处利用 UUID:
String uuid = UUID.randomUUID().toString().replace("-", "");
String randomString = "SCV00" + uuid.substring(0, 5);
System.out.println(randomString); // SCV00f044d
我假设您需要 0000
到 000Z
,然后是 0010
、0011
、0012
等等。您需要跟踪需要生成的当前 ID。像这样:
public class SequentialString {
private static final String START = "CLV0";
private static final String ALPHANUMERIC = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static void main(String[] args) {
int totalLength = 8;
int numberOfIds = 111;
int countRemainingSymbols = totalLength - START.length();
for (int i = 0; i < numberOfIds; i++) {
StringBuilder end = new StringBuilder();
int current = i;//depending on exact case, you would need to keep track of current
int remainder = current % ALPHANUMERIC.length();//the index of next character
do {
end.append(ALPHANUMERIC.charAt(remainder));
current /= ALPHANUMERIC.length();//update to check if we need to add more characters
remainder = current % ALPHANUMERIC.length();//update index, only used if more chars are needed
} while (current > 0);
int padCount = countRemainingSymbols - end.length();
StringBuilder result = new StringBuilder(START).append("-");//- is for easier debugging, remove it for your case
for (int j = 0; j < padCount; j++) {
result.append("0");
}
result.append(end.reverse());
System.out.println(result);
}
}
}
基本上,使用ALPHANUMERIC
的当前和长度来计算下一个字符索引,然后计算是否需要更多字符,一直循环直到不需要更多字符。请注意,在附加之前我正在反转生成的序列(代码中的变量 end
)。
另请注意,此解决方案不限于ZZZZ
,即使在那之后它也可以继续生成序列。
我希望能够生成给定长度 8 的连续字母数字字符串。此外,我希望字符串以特定字符串开头,比方说“ABC00”。想象一下车牌以特定字符串和其他生成的字母数字字符串开头。我已经尝试了很多我在这里看到的东西,但没有得到想要的结果。
这是我目前拥有的
import java.security.SecureRandom;
import java.util.Random;
public class RandomString {
static final String AB = "SCV00" + "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static SecureRandom rnd = new SecureRandom();
String randomString(int len){
StringBuilder sb = new StringBuilder(len);
for(int i = 0; i < len; i++)
sb.append(AB.charAt(rnd.nextInt(AB.length())));
return sb.toString();
}
}
我希望我的输出看起来像这样。当用户提供他们想要的 ID 数量时,我应该能够生成它。比如说,用户想要 3 个 ID。我应该。所以,我只是正确地阅读了要求,并且存在细微差别。
小写字母将被淘汰。这就是格式的样子。起始字符串是“CLV0”。
CLVO 0001
CLV0 0002
CLV0 0003
:
CLV0 0009
CLV0 000A
CLVO 000B
:
CLV0 000Z
CLV0 0010
这是实际顺序。这不是随机的。请帮忙解决这个问题
您可以在此处利用 UUID:
String uuid = UUID.randomUUID().toString().replace("-", "");
String randomString = "SCV00" + uuid.substring(0, 5);
System.out.println(randomString); // SCV00f044d
我假设您需要 0000
到 000Z
,然后是 0010
、0011
、0012
等等。您需要跟踪需要生成的当前 ID。像这样:
public class SequentialString {
private static final String START = "CLV0";
private static final String ALPHANUMERIC = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static void main(String[] args) {
int totalLength = 8;
int numberOfIds = 111;
int countRemainingSymbols = totalLength - START.length();
for (int i = 0; i < numberOfIds; i++) {
StringBuilder end = new StringBuilder();
int current = i;//depending on exact case, you would need to keep track of current
int remainder = current % ALPHANUMERIC.length();//the index of next character
do {
end.append(ALPHANUMERIC.charAt(remainder));
current /= ALPHANUMERIC.length();//update to check if we need to add more characters
remainder = current % ALPHANUMERIC.length();//update index, only used if more chars are needed
} while (current > 0);
int padCount = countRemainingSymbols - end.length();
StringBuilder result = new StringBuilder(START).append("-");//- is for easier debugging, remove it for your case
for (int j = 0; j < padCount; j++) {
result.append("0");
}
result.append(end.reverse());
System.out.println(result);
}
}
}
基本上,使用ALPHANUMERIC
的当前和长度来计算下一个字符索引,然后计算是否需要更多字符,一直循环直到不需要更多字符。请注意,在附加之前我正在反转生成的序列(代码中的变量 end
)。
另请注意,此解决方案不限于ZZZZ
,即使在那之后它也可以继续生成序列。