簡體   English   中英

生成隨機字符串后出現奇怪的返回值(Swift 3)

[英]Strange return value after generating random string (Swift 3)

我創建了一個方法,該方法生成並返回一個由字母和數字組成的隨機字符串,但是由於某種原因,我只能得到一個帶有數字的字符串,並且字符串的長度與我要求的接近。 已返回的字符串的一些示例:“ 478388299949939566”(插入長度為18),“ 3772919388584334”(插入長度為9),“ 2293010089409293993945”(插入長度為6)。 有人可以看到我在這里想念的嗎?

func generateRandomStringWithLength(length:Int) -> String {

    let randomString:NSMutableString = NSMutableString(capacity: length)

    let letters:NSMutableString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    for index in 0...length {

        let randomIndex:Int = Int(arc4random_uniform(UInt32(62)))
        randomString.append("\(letters.character(at: randomIndex))")

    }

    return String(randomString)
}

您的問題在這里:

letters.character(at: randomIndex)

它的功能返回給定UTF-16代碼單元索引處的字符,而不僅僅是一個字符

這是我的版本,我想它會更快。

func generateRandomStringWithLength(length: Int) -> String {

    var randomString = ""
    let letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

    for _ in 1...length {
        let randomIndex  = Int(arc4random_uniform(UInt32(letters.characters.count)))
        let a = letters.index(letters.startIndex, offsetBy: randomIndex)
        randomString +=  String(letters[a])
    }

    return randomString
}

generateRandomStringWithLength(length: 5)

用這個:

func generateRandomStringWithLength(length:Int) -> String {

        let randomString:NSMutableString = NSMutableString(capacity: length)

        let letters:NSMutableString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

        var i: Int = 0

        while i < length {

            let randomIndex:Int = Int(arc4random_uniform(UInt32(letters.length)))
            randomString.appendString("\(Character( UnicodeScalar( letters.characterAtIndex(randomIndex))))")
            i += 1
        }

        return String(randomString)
    }

調用generateRandomStringWithLength方法:

print(generateRandomStringWithLength(5))

print(generateRandomStringWithLength(10))

print(generateRandomStringWithLength(20))

print(generateRandomStringWithLength(7))

print(generateRandomStringWithLength(14))

樣本輸出:

GIrqb
nWmieQRVdk
r0It9V1xkGFRa2HVwtCw
RLIRuVI
nXnFGV2LQ3CjbD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM