我有一个包含二进制数字的字符串.如何把它分成几对数字?

假设字符串为:

let x = "11231245"

我想在每两个字符后添加一个分隔符,如":"(即冒号).

我希望输出为:

"11:23:12:45"

我怎么能在Swift 做到这一点?

推荐答案

Swift 5.2 • Xcode 11.4 or later

extension Collection {

    func unfoldSubSequences(limitedTo maxLength: Int) -> UnfoldSequence<SubSequence,Index> {
        sequence(state: startIndex) { start in
            guard start < endIndex else { return nil }
            let end = index(start, offsetBy: maxLength, limitedBy: endIndex) ?? endIndex
            defer { start = end }
            return self[start..<end]
        }
    }

    func every(n: Int) -> UnfoldSequence<Element,Index> {
        sequence(state: startIndex) { index in
            guard index < endIndex else { return nil }
            defer { formIndex(&index, offsetBy: n, limitedBy: endIndex) }
            return self[index]
        }
    }

    var pairs: [SubSequence] { .init(unfoldSubSequences(limitedTo: 2)) }
}

extension StringProtocol where Self: RangeReplaceableCollection {

    mutating func insert<S: StringProtocol>(separator: S, every n: Int) {
        for index in indices.every(n: n).dropFirst().reversed() {
            insert(contentsOf: separator, at: index)
        }
    }

    func inserting<S: StringProtocol>(separator: S, every n: Int) -> Self {
        .init(unfoldSubSequences(limitedTo: n).joined(separator: separator))
    }
}

Testing

let str = "112312451"

let final0 = str.unfoldSubSequences(limitedTo: 2).joined(separator: ":")
print(final0)      // "11:23:12:45:1"

let final1 = str.pairs.joined(separator: ":")
print(final1)      // "11:23:12:45:1"

let final2 = str.inserting(separator: ":", every: 2)
print(final2)      // "11:23:12:45:1\n"

var str2 = "112312451"
str2.insert(separator: ":", every: 2)
print(str2)   // "11:23:12:45:1\n"

var str3 = "112312451"
str3.insert(separator: ":", every: 3)
print(str3)   // "112:312:451\n"

var str4 = "112312451"
str4.insert(separator: ":", every: 4)
print(str4)   // "1123:1245:1\n"

Swift相关问答推荐

如何访问用户选定目录下的(只读)文件?

仅当单击UIButton时才调用计时器函数

如何观察UIViewRepresentable中的多个变化?

有条件地在同一视图上设置两个不同的过渡

Observable.create 捕获行为

如何制作进度加载动画?

如何为等待函数调用添加超时

Swift 根据总值将数组拆分为块

在 Swift 中为(递归)扩展提供默认实例参数

Swift 非参与者隔离闭包

在 SwiftUI 中的 ForEach 中使用 id 时如何为数组设置动画索引

按钮图像不会立即刷新

从 Swift 列表中的行中检索值

如何 for each 用户制作一个单独的按钮,以便在按下它时切换 isFollowingUser Bool 并更改为关注?

来自数据的 SwiftUI 图像

如何使 SwiftUI Picker 换行文本

无法增加系统镜像的大小

在 Swift 中强制崩溃的最简单方法

swift : 具有类型和值的枚举常量

用 UIBezierPath 画一条线