Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中生成随机字符串,而不直接为字符串使用随机类或方法_Java - Fatal编程技术网

在Java中生成随机字符串,而不直接为字符串使用随机类或方法

在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

我试图写下从预定义字符串生成5个字符的随机字符串的代码

我的目标是创建一个长度为5的字符串数组,并在此数组中存储所有5个随机字符串

到目前为止,我已经编写了以下代码:

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
常量值g
randomString[]
的不同索引中的字符,因此同一个字符的重复性为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);
}