Java 返回始终为字母数字的字符串值

Java 返回始终为字母数字的字符串值,java,string,integer,while-loop,Java,String,Integer,While Loop,我正在尝试创建一个由六个字母数字字符组成的字符串。下面的代码在大多数情况下都可以正常工作,但是在极少数情况下,一个由六个字母字符组成的字符串能够通过,如何确保返回的字符串始终是字母数字 String code = ""; while(!code.matches("[a-zA-Z0-9]+$")) { code = Integer.toString((int) (Math.random() * Integer.MAX_VALUE), 36); } return code; 重复尝试可

我正在尝试创建一个由六个字母数字字符组成的字符串。下面的代码在大多数情况下都可以正常工作,但是在极少数情况下,一个由六个字母字符组成的字符串能够通过,如何确保返回的字符串始终是字母数字

String code = "";

while(!code.matches("[a-zA-Z0-9]+$"))
{
    code = Integer.toString((int) (Math.random() * Integer.MAX_VALUE), 36);
}

return code;

重复尝试可能是最简单的,但您必须检查它是否包含字母和数字

String code;
do {
    code = Integer.toString((int) (Math.random() * Integer.MAX_VALUE), 36);
    if (code.length() > 6)
       code = code.substring(0, 6);
} while(!code.matches(".*\\w.*") || !code.matches(".*\\d.*") || code.length() < 6);
字符串代码;
做{
code=Integer.toString((int)(Math.random()*Integer.MAX_VALUE),36);
if(code.length()>6)
代码=代码子字符串(0,6);
}而(!code.matches(.*\\w.*)| |!code.matches(.*\\d.*)| | code.length()<6);

重复尝试可能是最简单的,但您必须检查它是否包含字母和数字

String code;
do {
    code = Integer.toString((int) (Math.random() * Integer.MAX_VALUE), 36);
    if (code.length() > 6)
       code = code.substring(0, 6);
} while(!code.matches(".*\\w.*") || !code.matches(".*\\d.*") || code.length() < 6);
字符串代码;
做{
code=Integer.toString((int)(Math.random()*Integer.MAX_VALUE),36);
if(code.length()>6)
代码=代码子字符串(0,6);
}而(!code.matches(.*\\w.*)| |!code.matches(.*\\d.*)| | code.length()<6);

我认为这个正则表达式应该确保字符串始终是字母数字(至少包含一个字母和一个数字)


我相信这个正则表达式应该确保字符串总是字母数字的(至少包含一个字母和一个数字)


您确定它是
+
?我想应该是
*
@BorisStrandjev你说得对,它也没有考虑长度。到目前为止,所有的字符串都是字母数字的,非常感谢!“+”code”和“*”code”有什么区别?“
*
和“
+
之间的区别在于第一个字符需要一个字母和一个数字,而不是第一个或最后一个字符,第二个字符允许它包含任何字符。您确定它是“
+
”吗?我想应该是
*
@BorisStrandjev你说得对,它也没有考虑长度。到目前为止,所有的字符串都是字母数字的,非常感谢!“code.+'code”和“code.*'code”有什么区别?
*
+
之间的区别在于,第一个需要一个字母和一个数字,而不是第一个或最后一个字符,第二个允许它包含任何字符。使用该正则表达式,我仍然可以得到一些仅为字母字符的字符串。其中一个字符串是“irtyfi”。使用这个正则表达式,我仍然可以得到一些仅仅是字母字符的字符串。其中一个字符串是“irtyfi”。