【问题标题】:random number generator for special characters [duplicate]特殊字符的随机数生成器[重复]
【发布时间】:2013-05-31 19:56:19
【问题描述】:

我正在尝试生成带有特殊字符的随机数

我对简单整数所做的是

Random randomGenerator = new Random();
int randomNumber = randomGenerator.nextInt();

我该怎么做才能在我的随机数中得到这样的东西

String salt = "Random$SaltValue#WithSpecialCharacters12@$@4&#%^$*";

谢谢

【问题讨论】:

    标签: java


    【解决方案1】:

    您可以尝试以下方法:

    • 初始化您的特殊字符集。
    • 创建一个 StringBuilder 来包含您想要的字符串。
    • 获取随机字符并附加到 StringBuilder 对象。

    代码:

    final String alphabet = "<Your special characters>";
    final int N = alphabet.length();
    Random rd = new Random();
    int iLength = <length you want>;
    StringBuilder sb = new StringBuilder(iLength);
    for (int i = 0; i < iLength; i++) {
        sb.append(alphabet.charAt(rd.nextInt(N)));
    }
    

    【讨论】:

    • StringBuilder 或固定长度的字符数组会提高效率。
    • @Duncan Jones 你说得对,谢谢你的建议!
    【解决方案2】:

    如果您乐于使用第三方库,您可能会发现来自 Apache Commons Lang 的 RandomStringUtils 类很有帮助。

    您可以指定允许的字符集(或使用所有可用字符)。

    【讨论】:

      【解决方案3】:
      import java.util.*;
      
      class Test {
      
        static Random r = new Random();
      
        static char[] choices = ("abcdefghijklmnopqrstuvwxyz" +
            "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
            "01234567890" +
            "$#_").toCharArray();
      
        public static String getSalt(int len) {
          StringBuilder salt = new StringBuilder(len);
          for (int i = 0; i<len; ++i)
            salt.append(choices[r.nextInt(choices.length)]);
          return salt.toString();
        }
      
        public static void main(String[]_) {
          System.out.println(getSalt(32));
        }
      }
      

      示例输出:vdq5L6bANFIQH_MUyKyZxLcOkJeB3uJ1

      【讨论】:

        【解决方案4】:

        如果你想生成这个http://en.wikipedia.org/wiki/Special_characters 特殊字符,那么试试这个

        char c = (char) (randomGenerator.nextInt(0xB4 - 21 + 1) + 21);
        

        【讨论】:

          【解决方案5】:
          String alphabet = "here specify all the characters you want";
              final int N = alphabet.length();
          
              Random r = new Random();
              String finalStr= "";
          
              for (int i = 0; i < 50; i++) {
                 finalStr+=alphabet.charAt(r.nextInt(N));
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-09
            • 2015-11-09
            • 2015-08-16
            • 2017-04-05
            • 2017-07-25
            • 2010-12-07
            • 2017-04-11
            相关资源
            最近更新 更多