Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Random - Fatal编程技术网

如何在Java中创建包含随机生成的数字的字符串列表?

如何在Java中创建包含随机生成的数字的字符串列表?,java,string,random,Java,String,Random,我需要能够创建一个函数来生成选定数量的字符串,并根据字符串掩码将随机生成的正数添加到其中 字符串掩码示例,其中[n#]表示具有特定位数的正数: generateStrings(2“(([n2])+[n5])/[n1]” 第一个数字告诉函数要生成多少字符串 2生成的字符串: (-23)+47269)/9 (-12)+17935)/1 我希望能够生成数字范围从1位到10位的字符串 编辑:这是一个可以生成数字范围为1到10的函数: public static int generateNumber(in

我需要能够创建一个函数来生成选定数量的字符串,并根据字符串掩码将随机生成的正数添加到其中

字符串掩码示例,其中[n#]表示具有特定位数的正数:

generateStrings(2“(([n2])+[n5])/[n1]”

第一个数字告诉函数要生成多少字符串

2生成的字符串:

(-23)+47269)/9

(-12)+17935)/1

我希望能够生成数字范围从1位到10位的字符串

编辑:这是一个可以生成数字范围为1到10的函数:

public static int generateNumber(int n) {
    int m;
    if (n==1){
        m = (0 + (int)(Math.random() * ((9 - 0) + 1)));
    } else if (n==2) {
        m = (10 + (int)(Math.random() * ((99 - 10) + 1)));
    } else if (n==3) {
        m = (100 + (int)(Math.random() * ((999 - 100) + 1)));
    } else if (n==4) {
        m = (1000 + (int)(Math.random() * ((9999 - 1000) + 1)));
    } else if (n==5) {
        m = (10000 + (int)(Math.random() * ((99999 - 10000) + 1)));
    } else if (n==6) {
        m = (100000 + (int)(Math.random() * ((999999 - 100000) + 1)));
    } else if (n==7) {
        m = (1000000 + (int)(Math.random() * ((9999999 - 1000000) + 1)));
    } else if (n==8) {
        m = (10000000 + (int)(Math.random() * ((99999999 - 10000000) + 1)));
    } else if (n==9) {
        m = (100000000 + (int)(Math.random() * ((999999999 - 100000000) + 1)));
    } else if (n==10) {
        m = (1000000000 + (int)(Math.random() * ((2147483647 - 1000000000) + 1)));
    }
    return m;
}
现在我只需要能够将该函数应用于字符串掩码

EDIT3:下面是一个脚本,该脚本应生成一个字符串,并使用上述格式的字符串掩码:

    public static String generateString(String mask) {
    for (int i = 1; i < 10; i++)
    {
        String searchString = "[n" + i + "]";
        int lastIndex = 0;
        int count = 0;
        while(lastIndex != -1){

               lastIndex = mask.indexOf(searchString,lastIndex);

               if( lastIndex != -1){
                     count ++;
                     lastIndex+=searchString.length();
              }
        }

        for (int j=count; j > 0;) {
            while(lastIndex != -1){

                   lastIndex = mask.indexOf(searchString,lastIndex);

                   if( lastIndex != -1){
                         count ++;
                         lastIndex+=searchString.length();
                  }
            }
            mask = mask.replaceFirst(searchString, String.valueOf(generateNumber(i)));
        }

    }
    return mask;
}
公共静态字符串生成器(字符串掩码){
对于(int i=1;i<10;i++)
{
字符串搜索字符串=“[n”+i+”];
int lastIndex=0;
整数计数=0;
while(lastIndex!=-1){
lastIndex=mask.indexOf(searchString,lastIndex);
如果(lastIndex!=-1){
计数++;
lastIndex+=searchString.length();
}
}
对于(int j=count;j>0;){
while(lastIndex!=-1){
lastIndex=mask.indexOf(searchString,lastIndex);
如果(lastIndex!=-1){
计数++;
lastIndex+=searchString.length();
}
}
mask=mask.replaceFirst(searchString,String.valueOf(generateNumber(i));
}
}
返回掩码;
}
我不知道这个脚本是否能工作,我也不知道如何测试我的代码,所以如果有人能验证它是否能工作,我将不胜感激。
这段代码的一部分来自ansible的回答,另一部分来自Codebreak对这个问题的回答:我只想为他们所做的工作给予表扬

如果您想从头开始学习Java,首先要生成一个。该字符串可用于所需的输出

但是如果你很懒,只想写一行代码,你就可以用它了。但是,这假设您知道如何将外部库添加到类路径中

String out = RandomStringUtils.randomNumeric(n);

一个建议,看看你的if/else块是如何重复的?我们可以用幂函数来表示简洁

public static int generateNumber(int n) {
    int lowerBound = (int) Math.pow(10,num-1);
    int upperBound = (int) Math.pow(10,num) - 1;

    int random = lowerBound + (int)(Math.random() * ((upperBound - lowerBound) + 1 ));

    return random;
}
现在,您可能要搜索字符串字母my letter,查找
[

然后,当你逐行阅读时,创建一个新的字符串,但是一旦你到达一个
[
你将需要做一些其他的事情,直到你找到相应的
]
括号。当你找到其中一个时,你会怎么做

一旦你能做到这一点,那么你就可以根据传递的内容做多次

如果你有特定的问题,然后张贴你有什么问题,你遇到什么问题

更新: 是的,这已经是一个更好的问题了。与其让别人来解决问题,不如想出一个解决方案,当你陷入困境时再问一个问题

这个问题的解决方案类似于随机数函数的问题。你显式地列出了所有的可能性,而不是使用变量和循环

这个怎么样

for (int i = 1; i < 10; i++)
{
    String searchString = "[n" + i + "]";
    mask = mask.replaceFirst(searchString, String.valueOf(generateNumber(i)));
}
for(int i=1;i<10;i++)
{
字符串搜索字符串=“[n”+i+”];
mask=mask.replaceFirst(searchString,String.valueOf(generateNumber(i));
}
现在,这将只替换每个字符串的第一个实例,我们希望继续在掩码上循环以查找每个字符串的所有实例。您将如何进行此操作

编辑2:

好的,有几件事。replaceAll接受一个正则表达式,所以括号把事情搞砸了(至少对我来说)。我首先搜索“n1”,“n2”,然后删除了所有括号

其次,第二个for循环中的while循环没有做任何事情。我猜是复制/粘贴错误

第三,我们可以将.replaceFirst移动到while循环中。将它们放在一起看起来是这样的

public static String generateString(String mask) {
    for (int i = 1; i < 10; i++)
    {
        String searchString = "n" + i;
        int lastIndex = 0;        

        while(lastIndex != -1){

            lastIndex = mask.indexOf(searchString,lastIndex);

            if( lastIndex != -1){
                mask = mask.replaceFirst(searchString, String.valueOf(generateNumber(i)));
            }
        }
    }

    mask = mask.replaceAll("\\[", "").replaceAll("\\]","");
    return mask;        
}
公共静态字符串生成器(字符串掩码){
对于(int i=1;i<10;i++)
{
String searchString=“n”+i;
int lastIndex=0;
while(lastIndex!=-1){
lastIndex=mask.indexOf(searchString,lastIndex);
如果(lastIndex!=-1){
mask=mask.replaceFirst(searchString,String.valueOf(generateNumber(i));
}
}
}
mask=mask.replaceAll(“\\[”,“”)。replaceAll(“\\]”,“”);
返回掩码;
}
所以基本上就是你所拥有的,只是为了可读性做了一些修改,并修复了正则表达式的问题

这对我来说是可行的。你现在唯一要做的就是把它包装在一个循环中,以便输出你想要的字符串数


需要注意的一点是,我们所做的工作效率非常低。每次运行
.replaceAll
replaceFirst
时,我们可能会在整个字符串中循环。我们至少执行了11次。这可以通过字符串的单次传递来完成,而不是查找
[nX]
,并用我们的随机数替换它们。我建议您尝试一下。

您尝试过分解问题吗?您是否停留在抽象上?让我们分解问题。您将如何创建具有特定位数的随机数?您尝试了什么?您遇到了什么问题?@ansible我猜是5-digit number你可以这样做:
10000+(int)(Math.random()*((99999-10000)+1))
我从这个问题中得到了答案:很好-现在你如何将它创建成一个函数,这个函数可以接受多个数字并返回一个具有正确数字的随机数?在你的que中发布你的代码