我试图生成一个随机字符串,这些是我发现的可能性:
Random.nextPrintableChar()
,用于打印字母,数字,标点符号Random.alphanumeric.take(size).mkString
,用于打印字母和数字Random.nextString(1)
,几乎每次打印中国字符lol 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
}
答案 0 :(得分:6)
找到了更好的解决方案:
Random.alphanumeric.filter(_.isLetter).head
答案 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)