在Scala中生成随机字符串/字母

时间:2016-01-07 21:32:50

标签: scala random

我试图生成一个随机字符串,这些是我发现的可能性:

  1. Random.nextPrintableChar(),用于打印字母,数字,标点符号
  2. Random.alphanumeric.take(size).mkString,用于打印字母和数字
  3. Random.nextString(1),几乎每次打印中国字符lol
  4.   

    Random是scala.util.Random

         

    size是一个Int

    第二种选择几乎完成了这项工作,但我需要从一封信开始。我找到了Random.nextPrintableChar(),但它也打印了标点符号。

    解决方案是什么?

    到目前为止我的解决方案是:

    val low = 65 // A
    val high = 90 // Z
    
    ((Random.nextInt(high - low) + low).toChar
    

    Random.nextPrintableChar实施的启发:

    def nextPrintableChar(): Char = {
        val low  = 33
        val high = 127
        (self.nextInt(high - low) + low).toChar
      }
    

3 个答案:

答案 0 :(得分:6)

找到了更好的解决方案:

Random.alphanumeric.filter(_.isLetter).head

jwvh commentedRandom.alphanumeric.dropWhile(_.isDigit)

的更好解决方案

答案 1 :(得分:1)

为了更好地控制内容,请自行选择字母:

val alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
val size = alpha.size

def randStr(n:Int) = (1 to n).map(x => alpha(Random.nextInt.abs % size)).mkString

答案 2 :(得分:0)

实际上,以下是最快的生成随机ASCII字符串的方法

  val rand = new Random()
  val Alphanumeric = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".getBytes
  
  def mkStr(chars: Array[Byte], length: Int): String = {
    val bytes = new Array[Byte](length)
    for (i <- 0 until length) bytes(i) = chars(rand.nextInt(chars.length))
    new String(bytes, StandardCharsets.US_ASCII)
  }
  def nextAlphanumeric(length: Int): String = mkStr(Alphanumeric, length)