我有一个包含二进制数字的字符串。如何将其分成几对数字?
假设字符串是:
let x = "11231245"
我想在每2个字符后添加一个分隔符,例如“:”(即冒号)。
我希望输出为:
"11:23:12:45"
我怎么能在Swift中做到这一点?
Swift 5.2•Xcode 11.4或更高版本
extension Collection {
func unfoldSubSequences(limitedTo maxLength: Int) -> UnfoldSequence<SubSequence,Index> {
sequence(state: startIndex) { start in
guard start < self.endIndex else { return nil }
let end = self.index(start, offsetBy: maxLength, limitedBy: self.endIndex) ?? self.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 { index = self.index(index, offsetBy: n, limitedBy: endIndex) ?? 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))
}
}
测验
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"
@LeoDabus您编写了这些扩展程序吗?如果是这样,您能帮我做什么吗?我正在尝试插入“ |” 每70个字符,但前提是第70个字符为空格。如果不是,请向后大步前进,直到找到一个空间。我基本上将其用作新的行生成器。我似乎无法弄清楚该如何做,并且我尝试了许多不同的方法。
是的,我都写了。随时发布您对问题的处理方法以及在新问题中出了什么问题,我将研究一下。
@LeoDabus很好,在这里看看。 stackoverflow.com/questions/43005306/…
@TheValyreanGroup,所以您要在第9个空格后在每个空格处拆分字符串?
哦,是的...太简单了。我好笨 非常感谢您的帮助。祝你有美好的一天!