Java怎么生成一个指定长度的字符串,且这个字符串必须包含大小写字母和数字

如题所述

这个容易, 此题关键部分是
1。 了解ASCII码的定义
2。 会使用随机函数

我不想直接把代码给你写出来,因为这可能是你的试题或者家庭作业,你需要自己去练习一下,才能进步。

但我把思路告诉你:
1. 字符串的长度不能少于3,即一个大写,一个小写,一个数字,这是最起码的,所以你可以先生成这三个字符先,
2, 这三个字符的生成采用随机数生成, 但随机数不是真的随机,你可以了解一下随机函数的参数,呵呵,它可以设定一个随机范围。 比如你可以指定生成 0〜100内的随机整数
3, 指定随机范围为 0〜9 从而可以生成数字
4, 再者指定随机范围为 65~90 得到的整数再转成char可以得到 ASCII码的大写字母
5, 同理指定随机范围为 97〜122得小写字母
6, 剩下的字符就随便随机从0〜255再转成ASCII码

如果你的需求是这次序也要是随机的,就需要再改进这个算法,最简单的就是:
1。 FOR循环指定的长度,
2。 每次随机生成一个字符CHAR,这个CHAR的随机范围只满足我前面说过的情况,要么0〜9,要么59〜90,要么97〜122, 字母的话,整数要强转成CHAR才能得到字母,本身就是0〜9的数字的话就不需要转了。
3。 每次新生成的字符加上前面己生成的字符最终得到结果
4。 将结果进么检测,看是否满足三个条件,如果满足返回结果,如不满足递归函数自己再次走1〜3步。

另外如果你在第二步进行改进,记录下己经产生过数字下次希望产生字母的逻辑,则第4步就可以不需要用递归了。具体算法自己再好好想想
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-20
这个应该可以达到你的要求。

---------------------------------------------------------------------------

public class StringLen {

public static void main(String[] args) {
StringBuffer buff = new StringBuffer();
int len = 10;
if (len < 3) {
// 必须包含大小写字母和数字
// 那这个字符串最小长度是3.
return;
}

int index = 0;
for (int i = 0; i < len; i++) {
char c = 'a';
int random = (int) (Math.random() * 1000);
if (i > 3) {
index = random % 3;
} else {
index = i;
}

switch (index) {
case 0:
buff.append((char) (97 + random % 26));
break;
case 1:
buff.append((char) (65 + random % 26));
break;
case 2:
buff.append((char) (48 + random % 10));
break;
}
}

System.out.println(buff.toString());
}
}
第2个回答  2012-04-20
/**
* 得到一个随机的由数字与字母组成的文件名
* @return
* @date :2011-12-2
*/
public static String getRandomName(){
String name="";
Random random = new Random(); // 实例化一个Random对象
int itmp=0;
int length=20;//默认的文件长度是20
try{
length=Integer.valueOf(Config.getSingleConfig(ConfigItem.DOC_NAME_LENGTH));
}catch(Exception e){}
for (int i = 0; i <length ; i++) {
if (random.nextInt(2) == 1) {
itmp = random.nextInt(26) + 65; // 生成A~Z的字母
} else {
itmp = random.nextInt(10) + 48; // 生成0~9的数字
}
char ctmp = (char) itmp;
name += String.valueOf(ctmp);
}
return name;
}
第3个回答  2012-04-20
使用apache-lang包下的RandomStringUtils类的方法可以直接生成。
第4个回答  2012-04-20
为了做任务前来回答问题顺便学习一下
相似回答