Hat*_*end 5 java regex string random
我正在尝试制作一个程序来为用户生成一个随机帐户名.用户将点击一个按钮,它会将帐户名称复制到他的剪贴板.它的GUI部分正在工作,但我想不出处理随机生成String的最佳方法.
用户名中的允许字符:AZ az _
连续数字,没有其他符号和两个相同的字符都不会出现.
必须是六个长度.
我的想法:
create an array of characters:
[ _, a, b, c, d ... etc ]
Generate a random integer between 0 and array.length - 1
and pick the letter in that slot.
Check the last character to be added into the output String,
and if it's the same as the one we just picked, pick again.
Otherwise, add it to the end of our String.
Stop if the String length is of length six.
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?也许正则表达式?我有一种感觉,我想这样做的方式非常糟糕.
我没有发现您提出的算法有任何问题(除了您需要处理您添加的第一个字符而不检查您是否已经添加它)。您也可以将其提取到一个static方法中并使用Random类似的方法,
static Random rand = new Random();
static String getPassword(String alphabet, int len) {
StringBuilder sb = new StringBuilder(len);
while (sb.length() < len) {
char ch = alphabet.charAt(rand.nextInt(alphabet.length()));
if (sb.length() > 0) {
if (sb.charAt(sb.length() - 1) != ch) {
sb.append(ch);
}
} else {
sb.append(ch);
}
}
return sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
然后你可以用类似的东西来称呼它,
public static void main(String[] args) {
StringBuilder alphabet = new StringBuilder();
for (char ch = 'a'; ch <= 'z'; ch++) {
alphabet.append(ch);
}
alphabet.append(alphabet.toString().toUpperCase()).append('_');
String pass = getPassword(alphabet.toString(), 6);
System.out.println(pass);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
371 次 |
| 最近记录: |