Swift - How to split an string i

作者: ArchLL | 来源:发表于2019-06-14 23:56 被阅读5次

最近一个朋友问了我一个问题,怎么将005056b12cda变成00:50:56:b1:2c:da

规律:按照一定的长度逐步分割字符串,并用特定的分割符将这些小段的字符串连成一个新的字符串

1.stride(from:to:by:)官方文档

//Returns a sequence from a starting value to, but not including, an end value, stepping by the specified amount.
func stride<T>(from start: T, to end: T, by stride: T.Stride) -> StrideTo<T>where T : Strideable

You can use this function to stride over values of any type that conforms to the Strideable protocol, such as integers or floating-point types. Starting with start, each successive value of the sequence adds stride until the next value would be equal to or beyond end.

你可以使用此函数跨过遵循Strideable协议的任何类型的值,例如整数或浮点类型。从start开始,序列的每个连续值都会增加步幅,直到下一个值等于或超过end

2.可是String类型没有遵循Strideable协议,不能直接进行stride操作,但是Array遵循该协议,而正好String也是集合类型,我们可以先将字符串转成Array,进行stride后遍历的到的序列,再将元素拼接成我们想要的字符串:

//swift 4.0+

extension Array {
    func chunked(into size: Int) -> [[Element]] {
        return stride(from: 0, to: count, by: size).map {
            Array(self[$0 ..< Swift.min($0 + size, count)])
        }
    }
}

extension String {
    func chunked(into size: Int, separatedBy separator: String) -> String {
        let array = Array(self)
        let newArray = array.chunked(into: size)
        var newString = ""
        for (index, item) in newArray.enumerated() {
            if index == 0 {
                newString = String(item)
            } else {
                newString += separator + String(item)
            }
        }
        return newString
    }
}

let str = "005056b12cda"
str.chunked(into: 2, separatedBy: ":")

Playground运行结果
参考:

相关文章

网友评论

    本文标题:Swift - How to split an string i

    本文链接:https://www.haomeiwen.com/subject/kgimfctx.html