当前位置:  开发笔记 > IOS > 正文

如何在swift中每N个字符添加分隔符到字符串?

如何解决《如何在swift中每N个字符添加分隔符到字符串?》经验,为你挑选了6个好方法。

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

假设字符串是:

let x = "11231245"

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

我希望输出为:

"11:23:12:45"

我怎么能在Swift中这样做?



1> Leo Dabus..:

Swift 4.2•Xcode 10

extension Collection {
    var pairs: [SubSequence] {
        var startIndex = self.startIndex
        let count = self.count
        let n = count/2 + count % 2
        return (0..


extension Collection {
    func distance(to index: Index) -> Int { distance(from: startIndex, to: index) }
}

测试

extension StringProtocol where Self: RangeReplaceableCollection {
    mutating func insert(separator: S, every n: Int) {
        for index in indices.dropFirst().reversed()
            where distance(to: index).isMultiple(of: n) {
            insert(contentsOf: separator, at: index)
        }
    }
    func inserting(separator: S, every n: Int) -> Self {
        var string = self
        string.insert(separator: separator, every: n)
        return string
    }
}



2> Stéphane de ..:

我会选择这个紧凑的解决方案(在Swift 4中):

let s = "11231245"
let r = String(s.enumerated().map { $0 > 0 && $0 % 2 == 0 ? [":", $1] : [$1]}.joined())

您可以进行扩展并参数化步幅和分隔符,以便您可以将它用于您想要的每个值(在我的情况下,我使用它来转储32位空间操作的十六进制数据):

extension String {
    func separate(every stride: Int = 4, with separator: Character = " ") -> String {
        return String(enumerated().map { $0 > 0 && $0 % stride == 0 ? [separator, $1] : [$1]}.joined())
    }
}

在您的情况下,这给出了以下结果:

let x = "11231245"
print (x.separate(every:2, with: ":")

$ 11:23:12:45


我的xcode在声明函数时要求返回,如下所示:func separate(每个步幅:Int = 4,带分隔符:Character ="") - > String {

3> Joe Maher..:

简短而简单,let如果你愿意,可以添加一两个

extension String {

    func separate(every: Int, with separator: String) -> String {
        return String(stride(from: 0, to: Array(self).count, by: every).map {
            Array(Array(self)[$0..

let a = "separatemepleaseandthankyou".separate(every: 4, with: " ")

a

分开mepl轻松和你



4> luk2302..:

我对该代码的尝试将是:

func insert(seperator: String, afterEveryXChars: Int, intoString: String) -> String {
    var output = ""
    intoString.characters.enumerate().forEach { index, c in
        if index % afterEveryXChars == 0 && index > 0 {
            output += seperator
        }
        output.append(c)
    }
    return output
}

insert(":", afterEveryXChars: 2, intoString: "11231245")

哪个输出

11:23:12:45



5> courteouselk..:
let y = String(
    x.characters.enumerate().map() {
        $0.index % 2 == 0 ? [$0.element] : [$0.element, ":"]
    }.flatten()
)


@LeoDabus,no,如果原始字符串是奇数长度,dropLast将消耗有效负载字符.

6> 小智..:

它是我的代码迅速4

let x = "11231245"

var newText = String()
    for (index, character) in x.enumerated() {
        if index != 0 && index % 2 == 0 {
            newText.append(":")
        }
        newText.append(String(character))
    }
    print(newText)

输出11:23:12:45

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有