【问题标题】:Generate random letters and numbers together一起生成随机字母和数字
【发布时间】:2011-01-29 12:20:10
【问题描述】:

生成 6 个字符:第一个字符是从字母表中奇数顺序的字母(A、C、E、...、Y)中随机生成的,第二个字符是从字母表中偶数顺序的字母中随机生成的(B, D, F, ..., Z) 第三个字符是从字母表(A 到 Z)中随机生成的,三个数字中的每一个都是从 1 到 9 随机生成的。

【问题讨论】:

  • 所以你的意思是abc123,或者也可以是a1b2c3
  • 这里是完整的问题。生成 6 个字符:第一个字符是从字母表中奇数顺序的字母(A、C、E、...、Y)中随机生成的,第二个字符是从字母表中偶数顺序的字母中随机生成的(B, D, F, ..., Z) 第三个字符是从字母表 (A 到 Z) 中随机生成的,三个数字中的每一个都是从 1 到 9 随机生成的。
  • 请提供示例输出。哪些字符串应该生成,哪些字符串不应该生成?
  • 样本输出为 AFZ391、EBD391、GBH491 ... :) 使用随机方法 :)
  • 听起来像家庭作业,重新标记。

标签: java random alphanumeric


【解决方案1】:

试试xegerbrics automaton

import nl.flotsam.xeger.Xeger;
import dk.brics.automaton.Automaton;

public class RandomizeString{
    public String generateRandomString(){
        String regex = "[ACEGIKMOQSUWY][BDFHJLNPRTVXZ][A-Z][0-9]{3}";
        Xeger generator = new Xeger(regex);
        String result = generator.generate();
        return result;
    }
}

要了解更多,请学习正则表达式。

【讨论】:

    【解决方案2】:

    你可以看看RandomStringUtils,或者至少看看它的源代码。

    【讨论】:

      【解决方案3】:

      使用我的库 dollar 很简单:

      @Test
      public void generateRandomString() {
          String string = $('a', 'z').shuffle().slice(3).join() + // take 3 random letters
                          $('0', '9').shuffle().slice(3).join();  // take 3 random digits
          assertThat(string.length(), is(6));
      }
      

      【讨论】:

      • 老实说,这看起来比没有你的图书馆的好解决方案更复杂。顺便说一句,Java 已经带有assert
      【解决方案4】:

      不确定这是否是家庭作业(看起来是这样),所以我会尝试为您指出可能的方法的正确方向:

      • 回想一下,随机整数可以是 两个其他之间的任何整数 X 指定整数 Y 和 Z。
      • 如何从随机数变为随机字符?
      • 你怎么能把 0 到 13 之间的随机数变成 0 到 26 之间的偶数呢?奇数?
      • 您如何利用这些想法/概念来回答这个问题?

      【讨论】:

        【解决方案5】:

        在java中你可以做char算术。所以

        'A' + RNG.nextInt(26);
        

        将返回一个介于“A”和“Z”之间的随机字母,其中RNGjava.util.Random 的一个实例。

        有效地构建字符串。使用StringBuilder

        【讨论】:

          【解决方案6】:

          我想生成 6 个随机字符,包括 3 个随机字母后跟 3 个随机数字,但我一次只能生成字母或数字。

          char a = randomLetter();
          char b = randomLetter();
          char c = randomLetter();
          
          int x = randomNumber();
          int y = randomNumber();
          int z = randomNumber();
          
          String result = new String()+a+b+c+x+y+z;
          

          【讨论】:

            【解决方案7】:

            你可以使用的一些基本的东西:

            • 字母表中所有 26 个字符的数组,并且,
            • 1 或 2 个随机数生成器实例。

            【讨论】:

              【解决方案8】:

              生成一组介于 0 - 61 之间的数字(上下各 61 个字母,加上数字)并将每个数字映射到 [0-9a-zA-Z] 中的一个,然后将整个数字连接在一起。

              【讨论】:

                【解决方案9】:

                使用随机生成器函数生成 [0,26) 范围内的数字,并将 (int)'a' 的值添加到其中,并将结果转换回字符

                【讨论】:

                  【解决方案10】:

                  这是作业吗?如果是这样,请适当地标记您的问题。

                  这里有一个线索:字母和数字都是字符,你可以将它们存储在一个数组中。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 2014-12-15
                    • 2011-08-18
                    • 1970-01-01
                    • 2011-10-07
                    • 2010-09-08
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多