在Golang中如何在没有整数的范围内生成随机长度的随机字符串

我试图用正则表达式从生成的字符串中删除整数,但这不会给我所需范围内的长度(许多会小于最小值)


package main


import (

    "fmt"

    "log"

    "math/rand"

    "regexp"

    "time"

)


func randomString(length int) string {

    rand.Seed(time.Now().UnixNano())

    b := make([]byte, length)

    rand.Read(b)

    return fmt.Sprintf("%x", b)[:length]

}

func randomLength(minL, maxL int) int {

    rand.Seed(time.Now().UnixNano())


    return rand.Intn(maxL-minL) + minL

}


func main() {

    reg, err := regexp.Compile("[^a-zA-Z]+")

    if err != nil {

        log.Fatal(err)

    }


    for i := 0; i < 10; i++ {

        processedString := reg.ReplaceAllString(randomString(randomLength(8, 16)), "")

        println(processedString)


    }


}


慕雪6442864
浏览 111回答 2
2回答

一只斗牛犬

var seededRand = rand.New(rand.NewSource(time.Now().UnixNano()))func StringWithCharset(length int, charset string) string {&nbsp; &nbsp; b := make([]byte, length)&nbsp; &nbsp; for i := range b {&nbsp; &nbsp; &nbsp; &nbsp; b[i] = charset[seededRand.Intn(len(charset)-1)]&nbsp; &nbsp; }&nbsp; &nbsp; return string(b)}func main() {&nbsp; &nbsp; rangeStart := 0&nbsp; &nbsp; rangeEnd := 10&nbsp; &nbsp; offset := rangeEnd - rangeStart&nbsp; &nbsp; randLength := seededRand.Intn(offset) + rangeStart&nbsp; &nbsp; charSet := "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ"&nbsp; &nbsp; randString := StringWithCharset(randLength, charSet)}

米琪卡哇伊

您只需要定义您正在使用的字母表。类似于以下内容(您可以在 Go Playground 中摆弄它)。package mainimport (&nbsp; "fmt"&nbsp; "math/rand"&nbsp; "strings"&nbsp; "time")func main() {&nbsp; rand.Seed(time.Now().UnixNano())&nbsp; var alphabet []rune = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz")&nbsp; rs := randomString(20, alphabet)&nbsp; fmt.Printf("This is pretty random: %s\n", rs)}func randomString(n int, alphabet []rune) string {&nbsp; alphabetSize := len(alphabet)&nbsp; var sb strings.Builder&nbsp; for i := 0; i < n; i++ {&nbsp; &nbsp; ch := alphabet[rand.Intn(alphabetSize)]&nbsp; &nbsp; sb.WriteRune(ch)&nbsp; }&nbsp; s := sb.String()&nbsp; return s}
打开App,查看更多内容
随时随地看视频慕课网APP