Swift 3:按字符串将字符串拆分为数组

时间:2016-11-11 04:05:07

标签: swift

我有一个字符串let string = "!101eggs"。现在,我希望有一个像["!", "101", "e", "g", "g", "s"]这样的数组。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

我认为你的困难部分是"其中的数字是"?只要这只是一个简单的数字序列,正则表达式便于查找:

let string = "!101eggs"
let patt = "\\d+"
let reg = try! NSRegularExpression(pattern:patt)
let r = reg.rangeOfFirstMatch(in: string, 
    options: [], 
    range: NSMakeRange(0,string.utf16.count)) // {1,3}

所以现在您知道该号码从位置1开始,长度为3个字符。其余部分留给读者练习。

答案 1 :(得分:1)

抱歉,这太长了

输入

print("-1-2a000+4-1/000!00005gf101eg14g1s46nj3j4b1j5j23jj212j4b2j41234j01010101g0000z00005g0000".toArrayByNumber())

结果:["-", "1", "-", "2", "a", "000", "+", "4", "-", "1", "/", "000", "!", "00005", "g", "f", "101", "e", "g", "14", "g", "1", "s", "46", "n", "j", "3", "j", "4", "b", "1", "j", "5", "j", "23", "j", "j", "212", "j", "4", "b", "2", "j", "41234", "j", "01010101", "g", "0000", "z", "00005", "g", "0000"]

    extension Int {
    func toZeroString() -> String {
        return (0 ..< self).reduce("", { (result, zero) -> String in
            return result + "0"
        })
    }
}

extension String {

    func toArrayByNumber() -> [String] {

        var array: [String] = []
        var num = 0
        var zeroCount = 0
        var zeroEnd = false

        for char in self.characters {
            if let number = Int("\(char)") {
                if zeroEnd == false && number == 0 {
                    zeroCount += 1
                } else {
                    num = num * 10 + number
                    zeroEnd = true
                }

            } else {
                if num != 0 {
                    array.append(zeroCount.toZeroString() + ("\(num)"))
                } else if zeroCount > 0 {
                    array.append(zeroCount.toZeroString())
                }


                array.append(String(char))
                num = 0
                zeroCount = 0
                zeroEnd = false
            }
        }

        if num != 0 {
            array.append(zeroCount.toZeroString() + ("\(num)"))
        } else if zeroCount > 0 {
            array.append(zeroCount.toZeroString())
        }

        return array
    }
}