在Java中生成随机字符串,而不直接为字符串使用随机类或方法
我试图写下从预定义字符串生成5个字符的随机字符串的代码 我的目标是创建一个长度为5的字符串数组,并在此数组中存储所有5个随机字符串 到目前为止,我已经编写了以下代码:在Java中生成随机字符串,而不直接为字符串使用随机类或方法,java,Java,我试图写下从预定义字符串生成5个字符的随机字符串的代码 我的目标是创建一个长度为5的字符串数组,并在此数组中存储所有5个随机字符串 到目前为止,我已经编写了以下代码: public static String generateRandomString(int stringlength, String fullstring){ //Generating random number which will use to pick character from provider stri
public static String generateRandomString(int stringlength, String fullstring){
//Generating random number which will use to pick character from provider string at index[i]
int i =((int)(Math.random()*100));
//Created a character array to store the characters picked up from provided String
char [] randomString = new char[5];
//Checking the condition if generated random number is greater than or equals to string length to avoid OutOfBoundException
if (i>=stringlength){
generateRandomString(stringlength, fullstring);
}
//Else Fetching the character from provided string and storing it into Char[]
else
{
randomString [0] = (fullstring.charAt(i));
randomString [1] = (fullstring.charAt(i));
randomString [2] = (fullstring.charAt(i));
randomString [3] = (fullstring.charAt(i));
randomString [4] = (fullstring.charAt(i));
}
//Converting Char[] to String.
String returnString = new String(randomString);
//Returning String
return returnString;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
//String Array to Store Random Strings
String [] array = new String[5];
//Provided String
String fullstring = "abcdefghijklmnopqrstuvwxyz";
int stringlength = fullstring.length();
//Loop to store random strings into all indexes of String[]
for(int j=0;j<5;j++){
array[j]=generateRandomString(stringlength, fullstring);
}
//Printing Final String[]
for(String var:array){
System.out.println(var);
}
}
publicstaticstringgeneraterandomstring(int-stringlength,stringfullstring){
//生成用于从索引[i]处的提供程序字符串中拾取字符的随机数
inti=((int)(Math.random()*100));
//创建了一个字符数组来存储从提供的字符串中提取的字符
char[]randomString=新字符[5];
//检查生成的随机数是否大于或等于字符串长度以避免OutOfBoundException
如果(i>=stringlength){
GeneratorDomainString(stringlength,fullstring);
}
//Else从提供的字符串中提取字符并将其存储到Char[]
其他的
{
randomString[0]=(fullstring.charAt(i));
randomString[1]=(fullstring.charAt(i));
randomString[2]=(fullstring.charAt(i));
randomString[3]=(fullstring.charAt(i));
randomString[4]=(fullstring.charAt(i));
}
//正在将Char[]转换为字符串。
String returnString=新字符串(随机字符串);
//返回字符串
返回字符串;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
//用于存储随机字符串的字符串数组
String[]数组=新字符串[5];
//提供的字符串
String fullstring=“abcdefghijklmnopqrstuvxyz”;
int stringlength=fullstring.length();
//循环将随机字符串存储到字符串[]的所有索引中
对于(int j=0;j您可以更改
if (i>=stringlength){
generateRandomString(stringlength, fullstring);
} else { // this is where you're saving all similar characters to the array
randomString [0] = (fullstring.charAt(i));
randomString [1] = (fullstring.charAt(i));
randomString [2] = (fullstring.charAt(i));
randomString [3] = (fullstring.charAt(i));
randomString [4] = (fullstring.charAt(i));
}
到
虽然代码可以进一步清理和抽象,但应将fullstring
中的随机字符分配给char[]
的不同索引。您需要为每个输出符号生成一个新字符。假设您使用的是Java 8+,您可以从您的输入fullstring
生成一个随机字符流
——将其限制为stringlength
,然后收集为字符串
;例如
public static String generateRandomString(int stringlength, String fullstring) {
return Stream.generate(() -> Character.toString(fullstring.charAt( //
(int) (Math.random() * fullstring.length())))) //
.limit(stringlength).collect(Collectors.joining());
}
然后,在调用它时,再次生成随机的五个字符的字符串,并将其限制为所需的五个字符串,最后收集它。使用数组可能有点笨拙,但可以像
public static void main(String[] args) {
String fullstring = "abcdefghijklmnopqrstuvwxyz";
String[] r = Stream.generate(() -> generateRandomString(5, fullstring)) //
.limit(5).collect(Collectors.toList()).toArray(new String[5]);
System.out.println(Arrays.toString(r));
}
一种简单但占用内存少的方法是定义一个可接受字符数组,并使用Random类或Math.Random()选择索引
例如:
String randomString(int length, char[] chars)
{
char[] result = new char[length];
Random rand = new Random();
for(int x = 0; x < length; x++)
result [x] = chars [Math.abs(rand.nextInt())%chars.length];
return new String(result);
}
String随机字符串(int-length,char[]chars)
{
字符[]结果=新字符[长度];
Random rand=新的Random();
对于(int x=0;x
randomString[0]=(fullstring.charAt(i));randomString[1]=(fullstring.charAt(i));randomString[2]=(fullstring.charAt(i));randomString[3]=(fullstring.charAt(i));randomString[4]=(fullstring.charAt(i))
是你的罪魁祸首。试着调试一下为什么…它对我来说非常有效..但我仍然没有得到我所缺少的东西,很抱歉问一下,但我是Java新手。你能不能请你进一步说明我编写的mycode中的错误。谢谢。正如你在代码块的注释中提到的。你对storin使用了相同的I
常量值grandomString[]
的不同索引中的字符,因此同一个字符的重复性为5次。是的,但为什么在打印数组时给出空字符串(我查询的第2期)?对不起,这是一个带有空格的空字符串,有时它也只打印空字符串。先生,您看过我的第2期了吗,虽然它不是在应用代码之后出现的。但是,获得答案对我来说非常有用,所以我将从下一次开始处理它。
String randomString(int length, char[] chars)
{
char[] result = new char[length];
Random rand = new Random();
for(int x = 0; x < length; x++)
result [x] = chars [Math.abs(rand.nextInt())%chars.length];
return new String(result);
}