Generate Random String/Letter in Scala

I'm trying to generate a random String, and these are the possibilities I've found:

  1. Random.nextPrintableChar(), which prints letters, numbers, punctuation
  2. Random.alphanumeric.take(size).mkString, which prints letters and numbers
  3. Random.nextString(1), which prints Chinese chars almost every time lol

Random is scala.util.Random

size is an Int

The second option almost does the job, but I need to start with a letter. I found Random.nextPrintableChar() but it also prints punctuation.

What's the solution?

My solution so far was:

val low = 65 // A
val high = 90 // Z

((Random.nextInt(high - low) + low).toChar

Inspired by Random.nextPrintableChar implementation:

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

3 Answers

Found a better solution:

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

A better solution as jwvh commented: Random.alphanumeric.dropWhile(_.isDigit)

3

For better control of the contents, select the alphabet yourself:

val alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
def randStr(n:Int) = (1 to n).map(_ => alpha(Random.nextInt(alpha.length))).mkString
6

Actually the fastest method to generate Random ASCII String is the following

  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)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Sarah Jenkins

Sarah Jenkins

Senior Technology Editor & AI Specialist

Sarah Jenkins is a veteran tech journalist with over 12 years of experience covering artificial intelligence, mobile innovations, and digital ethics. Her insights have appeared in leading technology publications worldwide.

Share this article
Twitter Facebook Pinterest