ASCII编码,数字随机,然后....
解决方案 »
- JDBC问题
- 一个例子,有点不太明白为什么错了
- 怎么用java删除文件??
- java票据打印得问题
- 『求助』如何将10000转化为16进制再赋给字节数组??
- 面试问题,熟悉XML的朋友进来看看,说说,谢谢各位参与,参与有分
- 100---------JScrollPane中的滚动条为何不行啦?熟悉swing控件的高手请让我送点分
- 我在Java2 从入门到精通中看到checkMod()方法,但是报错,不知道什么原因?
- 编译问题
- 可爱的Oracle JDeveloper 3.1--一个低配置的悲哀
- 请高手们探讨一下目录树的多种算法???
- 如果用JFrame封装JApplet,那么这个JApplet能不能访问本地文件?
for (int i=0;i<6;i++){
char a = (char)random.nextInt(127)
s = s+a;
}
static long seed = System.currentTimeMillis();
static long skip = Long.parseLong("187649984473770");
static char ch[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',}; public static String getString(int length){
if(length>62 || length<=0){
throw new IllegalArgumentException();
}else if(length == 62){
length--;
}
Random r = new Random(seed);
int rNum;
char temp;
for(int i=0; i<length; i++){
rNum = r.nextInt(62);
seed += skip;
r.setSeed(seed);
if(rNum < i){
rNum = i+1;
}
temp = ch[i];
ch[i] = ch[rNum];
ch[rNum] = temp;
}
return new String(ch,0,length);
}
* 产生随机字符串,长度由参数指定。
* @param length 产生的字符串的长度
* @return 已产生的字符串
*/
public static String getRandString(int length)
{
String charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
String rev = "";
java.util.Random f = new Random();
for(int i=0;i<length;i++)
{
rev += charList.charAt(Math.abs(f.nextInt())%charList.length());
}
return rev;
}
我自己写了一段,已通过测试,请大家指教。
代码在下面:
public static void main(String args[]){
String s="";
int num=0,ch=0,Ch=0;
int re;
Random random = new Random();
for (int i=0;i<6;i++){
re = random.nextInt(3);
switch (re){
case 0:num =48+random.nextInt(10);
System.out.print((char)num+" ");
break;
case 1:ch = 97+random.nextInt(26);
System.out.print((char)ch+" ");
break;
case 2:Ch =65 +random.nextInt(26);
System.out.print((char)Ch+" ");
break;
default:System.out.print("This is an Exception!");
}
System.out.print("\n");
}
}
}
简单,易懂如果有什么特殊要求,改改就行了不过String.charAt()方法的效率似乎没有数组高
的不错。/**
* 产生随机字符串,长度由参数指定。
* @param length 产生的字符串的长度
* @return 已产生的字符串
*/
public static String getRandString(int length)
{
//没有必要构造一个String对象,应直接用char[]。既然是static方法每次调用此方法均会用到此字符集,何不设为类的静态私有成员。
String charList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
//应使用char[length]代替rev
String rev = "";
java.util.Random f = new Random();
for(int i=0;i<length;i++)
{
//由于rev设为String型致每次循环生成一个String对象,没有必要。另用%进行随机计算时间效率低。
rev += charList.charAt(Math.abs(f.nextInt())%charList.length());
}
return rev;
}
此代码虽短但不精。
具体测试数据是:
原来的方法取得10000个需要70毫秒,下面这个方法需要50毫秒
谢谢你的指点哦public static String getRandStringEx(int length)
{
byte[] charList = {'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J','K','L','M',
'N','O','P','Q','R','S','T','U','V','W','X','Y','Z',
'a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z'};
byte[] rev = new byte[length];
Random f = new Random();
for(int i=0;i<length;i++)
{
rev[i] = charList[Math.abs(f.nextInt())%length];
}
return new String(rev);
}
import java.util.*;public class Test
{
public static void main(String[] args)
{
long l1,l2;
l1 = System.currentTimeMillis();
for(int i=0;i<100000;i++)
A.getRandString(10);
l2 = System.currentTimeMillis();
System.out.println("ntzls used:"+(l2-l1));
l1 = System.currentTimeMillis();
for(int i=0;i<100000;i++)
getRandStringEx(10);
l2 = System.currentTimeMillis();
System.out.println("pease used:"+(l2-l1));
}
//你的算法
public static String getRandStringEx(int length){
}
//我的算法
private static long seed = System.currentTimeMillis();
private static long skip = Long.parseLong("187649984473770");
private static Random random = new Random(seed);
private static char ch[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1'};
public static String getRandString(int length){
if(length>0){
char[] result;
int loops;
if(length%5 == 0){
result = new char[length];
loops = length/5;
}else{
result = new char[(length/5)*5];
loops = length/5+1;
}
int ran;
for(int i=0,j=loops; j>0; j--){
ran = random.nextInt();
result[i++] = ch[(byte)ran&63];
ran >>= 6;
result[i++] = ch[(byte)ran&63];
ran >>= 6;
result[i++] = ch[(byte)ran&63];
ran >>= 6;
result[i++] = ch[(byte)ran&63];
ran >>= 6;
result[i++] = ch[(byte)ran&63];
}
seed += skip;
random.setSeed(seed);
return new String(result,0,length);
}else if(length == 0){
return "";
}else{
throw new IllegalArgumentException();
}
}
}
参考数据ntzls used:130
pease used:390
呵呵,写一个来切磋、切磋。
private static char ch[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','0','1'};
public static String getRandString(int length){
if(length>0){
char[] result = new char[length];
int loops = length/5,index = 0,rand = random.nextInt();
for(int i=0; i<length%5; i++){
result[index++] = ch[(byte)rand&63];rand >>= 6;
}
for(int i=length/5; i>0; i--){
rand = random.nextInt();
for(int j=0; j<5; j++){
result[index++] = ch[(byte)rand&63];rand >>= 6;
}
}
return new String(result,0,length);
}else if(length == 0){
return "";
}else{
throw new IllegalArgumentException();
}
}