范围为 (A..Z, 0..9) 和标点符号的随机字符生成器

Posted

技术标签:

【中文标题】范围为 (A..Z, 0..9) 和标点符号的随机字符生成器【英文标题】:Random character generator with a range of (A..Z, 0..9) and punctuation 【发布时间】:2011-03-08 01:48:18 【问题描述】:

我需要创建一个返回单个字符的随机字符生成器。该字符应在字母、数字 0 到 9 以及某些字符(如 ,.?/-)内。任何示例将不胜感激。

【问题讨论】:

第一。你认为你会使用什么语言?第二。请发布您对如何执行此操作的最佳猜测。这不是“为 me.com 做我的功课”。 在标签关闭之前添加一种语言。 用什么编程语言? 感谢您直率的回答。语言是Java。我正在使用 android SDK。我将生成数字并获取每个字符的数字的 ASCII 值。我不需要完成我的家庭作业。我今年 67 岁,编程时间可能比你还久。 为您的问题添加了标签。 【参考方案1】:

    在 [0, x) 之间选择一个随机数,其中 x 是不同符号的数量。希望选择是一致选择的,而不是可预测的:-)

    现在选择代表 x 的符号。

    利润!

我会开始阅读Pseudorandomness,然后是一些常见的Pseudo-random number generators。当然,你的语言希望已经有一个合适的“随机”函数:-)

【讨论】:

+1 使用合理的步骤 -> 步骤 -> 利润!!!遇到此类问题时的方案。【参考方案2】:

使用一些简单的命令行(bash 脚本):

$ cat /dev/urandom | tr -cd 'a-z0-9,.?/\-' | head -c 30 | xargs
t315,qeqaszwz6kxv?761rf.cj/7gc

$ cat /dev/urandom | tr -cd 'a-z0-9,.?/\-' | head -c 1 | xargs
f
cat /dev/urandom:从内核中获取随机字符流 tr:只保留我们想要的 char char head:只取第一个 n 字符 xargs:仅用于添加'\n' char

【讨论】:

【参考方案3】:

最简单的方法是:

使用所需的字符创建 String alphabet。 说N = alphabet.length() 然后我们可以向java.util.Random 询问int x = nextInt(N) alphabet.charAt(x) 是字母表中的一个随机字符

这是一个例子:

    final String alphabet = "0123456789ABCDE";
    final int N = alphabet.length();

    Random r = new Random();

    for (int i = 0; i < 50; i++) 
        System.out.print(alphabet.charAt(r.nextInt(N)));
    

【讨论】:

【参考方案4】:

这里是安全、简单但稍微昂贵的会话标识符的代码。

import java.security.SecureRandom;
import java.math.BigInteger;

public final class SessionIdentifierGenerator


  private SecureRandom random = new SecureRandom();

  public String nextSessionId()
  
    return new BigInteger(130, random).toString(32);
  


【讨论】:

【参考方案5】:

为什么要重新发明***?来自 Apache Commons 的 RandomStringUtils 具有您可以指定从中生成字符的字符集的函数。你可以把你需要的东西带到你的应用中:

http://kickjava.com/src/org/apache/commons/lang/RandomStringUtils.java.htm

【讨论】:

【参考方案6】:

见以下链接: http://www.asciitable.com/

public static char randomSeriesForThreeCharacter() 
    Random r = new Random();
    char random_3_Char = (char) (48 + r.nextInt(47));
    return random_3_Char;

现在您可以在一次调用时生成一个角色。

【讨论】:

【参考方案7】:
Random random = new Random();
int n = random.nextInt(69) + 32;
if (n > 96) 
    n += 26;

char c = (char) n;

我想这取决于您要包含哪个标点符号,但这应该会生成一个随机字符,包括此 ASCII 表上的所有标点符号。基本上,我从 32 - 96 或 123 - 126 生成了一个随机 int,然后我将其转换为一个 char,它给出了该数字的 ASCII 等价物。另外,请确保您import java.util.Random

【讨论】:

【参考方案8】:

您应该首先创建一个包含所有您想要的字母/数字的字符串。 然后,做一个随机的。 e. G。 Random rnd = new Random; 最后,制作一些实际上从包含您的字母表的字符串中获取随机字符的东西。 例如,

import java.util.Random;

public class randomCharacter 
    public static void main(String[] args) 
        String alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ?/.,";
        Random rnd = new Random();
        char char = alphabet.charAt(rnd.nextInt(alphabet.length()));
        // do whatever you want with the character
    

见this。 我就是从那里得到这些信息的。

【讨论】:

【参考方案9】:

随机字符 包 com.company;

         import java.util.concurrent.ThreadLocalRandom;

         public class Main 

            public static void main(String[] args) 
            // write your code here
                char hurufBesar =randomSeriesForThreeCharacter(65,90);
                char angka = randomSeriesForThreeCharacter(48,57);
                char simbol = randomSeriesForThreeCharacter(33,47);
                char hurufKecil= randomSeriesForThreeCharacter(97,122);
                char angkaLagi = randomSeriesForThreeCharacter(48,57);

                System.out.println(hurufBesar+" "+angka+" "+simbol+" "+hurufKecil+" "+angkaLagi);
            

            public static char randomSeriesForThreeCharacter(int min,int max) 
                int randomNumber = ThreadLocalRandom.current().nextInt(min, max + 1);
                char random_3_Char = (char) (randomNumber);
                return random_3_Char;
             
         

【讨论】:

以上是关于范围为 (A..Z, 0..9) 和标点符号的随机字符生成器的主要内容,如果未能解决你的问题,请参考以下文章

定义一个类:实现功能可以返回随机的10个数字,随机的10个字母, 随机的10个字母和数字的组合;字母和数字的范围可以指定,类似(1~100)(A~z)

Puppet正则表达式(十七)

Java基础部分

正则表达式的一些符号

js取范围内的随机数

js取范围内的随机数