C# 从退出的字符生成字符串

C# 从退出的字符生成字符串,c#,java,C#,Java,我有一个字符数组,如下所示: char[] pwdCharArray = "abcdefghijklmnopqrstuvwxyzABCDEFG" + "HIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+[]{}\\|;:'\",<" + ".>/?".ToCharArray(); 从这个字符数组中,我想生成一个最小长度为7的字符串,字符串中的所有字符都应该来自上面的字符数组。 如何执行

我有一个字符数组,如下所示:

char[] pwdCharArray = "abcdefghijklmnopqrstuvwxyzABCDEFG" +
            "HIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+[]{}\\|;:'\",<" + 
            ".>/?".ToCharArray();
从这个字符数组中,我想生成一个最小长度为7的字符串,字符串中的所有字符都应该来自上面的字符数组。 如何执行此操作?

C示例

Random rand = new Random();
char[] arr = new char[rand.Next(7,15)];
for(int i = 0 ; i < arr.Length ; i++) {
    arr[i] = pwdCharArray[rand.Next(pwdCharArray.Length)];
}
string pwd = new string(arr);
C示例

Random rand = new Random();
char[] arr = new char[rand.Next(7,15)];
for(int i = 0 ; i < arr.Length ; i++) {
    arr[i] = pwdCharArray[rand.Next(pwdCharArray.Length)];
}
string pwd = new string(arr);

在0和数组之间生成7个随机数。长度-1。 在数组中选择相应的字符并将其放入最后一个字符串中

以下是使用StringBuilder的代码:

StringBuilder sb = new StringBuilder();
Random random = new Randdom();
for(int i=0; i<7; i++) {
    sb.append(pwdCharArray[random.nextInt(0, pwdCharArray.length -1)]);
}
return sb.toString();

在0和数组之间生成7个随机数。长度-1。 在数组中选择相应的字符并将其放入最后一个字符串中

以下是使用StringBuilder的代码:

StringBuilder sb = new StringBuilder();
Random random = new Randdom();
for(int i=0; i<7; i++) {
    sb.append(pwdCharArray[random.nextInt(0, pwdCharArray.length -1)]);
}
return sb.toString();

最大长度是多少?您可能希望参数化下面的方法,以指定最小和最大长度。以下是一种仅需7个字符的简单方法:

以下是C版本:

public string GeneratePassword(Random rng)
{
    char[] chars = new char[7];
    for (int i = 0; i < chars.Length; i++)
    {
        chars[i] = pwdCharArray[rng.Next(pwdCharArray.Length)];
    }
    return new string(chars);
}

最大长度是多少?您可能希望参数化下面的方法,以指定最小和最大长度。以下是一种仅需7个字符的简单方法:

以下是C版本:

public string GeneratePassword(Random rng)
{
    char[] chars = new char[7];
    for (int i = 0; i < chars.Length; i++)
    {
        chars[i] = pwdCharArray[rng.Next(pwdCharArray.Length)];
    }
    return new string(chars);
}

下面是一个Java解决方案,具有可变字长和工作测试:

import java.util.*;

public class RandomWord {

    // Valid characters
    private static String VALID_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFG" +
            "HIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+[]{}\\|;:'\",<.>/?";

    // Minimal length thw word can have
    private static int MIN_LENGTH = 7;
    // Maximal length will be MIN_LENGTH + THRESHOLD - 1
    private static int THRESHOLD = 10;

    // Generate a random number generator.
    // The time in millis is used as seed prevents the numbers to be always the same in same order
    Random randomGenerator =  new Random(System.currentTimeMillis());

    public String generateWord () {
        // Actual length of the word (from MIN_LENGTH to MIN_LENGTH + THRESHOLD - 1)
        int length = MIN_LENGTH + randomGenerator.nextInt(THRESHOLD);
        // Loop for every character
        StringBuilder word = new StringBuilder();
        for (int i = 0; i < length; i++) {
            // Appends one more random char
            word.append(VALID_CHARACTERS.charAt(randomGenerator.nextInt(VALID_CHARACTERS.length())));
        }
        // Returns the random word
        return word.toString();
    }

    // Test the class
    public static void main (String[] args) {
        // Instantiates and tests the class
        RandomWord randomWord = new RandomWord();
        for (int i = 0; i < 30; i++) {
            String word = randomWord.generateWord();
            System.out.println(word + " (" + word.length() + ")");
        }
    }
}

下面是一个Java解决方案,具有可变字长和工作测试:

import java.util.*;

public class RandomWord {

    // Valid characters
    private static String VALID_CHARACTERS = "abcdefghijklmnopqrstuvwxyzABCDEFG" +
            "HIJKLMNOPQRSTUVWXYZ0123456789`~!@#$%^&*()-_=+[]{}\\|;:'\",<.>/?";

    // Minimal length thw word can have
    private static int MIN_LENGTH = 7;
    // Maximal length will be MIN_LENGTH + THRESHOLD - 1
    private static int THRESHOLD = 10;

    // Generate a random number generator.
    // The time in millis is used as seed prevents the numbers to be always the same in same order
    Random randomGenerator =  new Random(System.currentTimeMillis());

    public String generateWord () {
        // Actual length of the word (from MIN_LENGTH to MIN_LENGTH + THRESHOLD - 1)
        int length = MIN_LENGTH + randomGenerator.nextInt(THRESHOLD);
        // Loop for every character
        StringBuilder word = new StringBuilder();
        for (int i = 0; i < length; i++) {
            // Appends one more random char
            word.append(VALID_CHARACTERS.charAt(randomGenerator.nextInt(VALID_CHARACTERS.length())));
        }
        // Returns the random word
        return word.toString();
    }

    // Test the class
    public static void main (String[] args) {
        // Instantiates and tests the class
        RandomWord randomWord = new RandomWord();
        for (int i = 0; i < 30; i++) {
            String word = randomWord.generateWord();
            System.out.println(word + " (" + word.length() + ")");
        }
    }
}

究竟退出了什么?我在这里看到了很多,但从来没有解决过…@ck也许这是一个反常的变形,地球上有什么存在?我在这里看到了很多,但从来没有解决过…@ck也许这是一个反常的输入变形:-π我猜它开始于一个a-也许aa或ab。。。我接近了吗;p@Marc:是的,我在做Java版本时发现了这一点:这里有一些关于行李组合和行星护盾的笑话,但我不会弯腰太低…我猜它是从a开始的-可能是aa或ab。。。我接近了吗;p@Marc:是的,我在做Java版本的时候发现了这一点:这里有一些关于行李组合和行星护盾的笑话,但我不会弯腰这么低。。。