Arrays 在保持拆分字符串的同时以Swift拆分字符串

Arrays 在保持拆分字符串的同时以Swift拆分字符串,arrays,swift,string,algorithm,components,Arrays,Swift,String,Algorithm,Components,如何在保留分隔字符串的同时将字符串拆分为数组 执行此操作可以拆分字符串,但不会保留分隔符子字符串: “我的名字”。组件(以“-”分隔->[“我的”,“名字”] 这就是我想要实现的目标: 例1:“我的名字”。someSplitFunc(以“-”分隔)->[“我的-”,“名字”] 例2:“This-is-a-句子”。someSplitFunc(分隔符:“-”)->[“This-”, “is-”、“a-”、“句子”] 另外,没有一种本地的Swift方法可以完成您想要的任务。您将需要实现自己的拆分方法来

如何在保留分隔字符串的同时将字符串拆分为数组

执行此操作可以拆分字符串,但不会保留分隔符子字符串:

“我的名字”。组件(以“-”分隔->[“我的”,“名字”]

这就是我想要实现的目标:

例1:“我的名字”。someSplitFunc(以“-”分隔)->[“我的-”,“名字”]

例2:“This-is-a-句子”。someSplitFunc(分隔符:“-”)->[“This-”, “is-”、“a-”、“句子”]


另外,没有一种本地的Swift方法可以完成您想要的任务。您将需要实现自己的拆分方法来扩展
集合
。大概是这样的:


您可以尝试以下方法:

var str = "This-is-a-sentence"
var separateList = str.components(separatedBy: "-")
for (index, _) in separateList.enumerated() {
    if index < separateList.count - 1 {
        separateList[index].append("-")
    }
}

print(separateList)
var str=“这是一句话”
var separateList=str.components(以“-”分隔)
对于separateList.enumerated()中的(索引,u){
如果索引
只需使用下面的扩展名即可

extension String {
    func componentSeparate(by: String) -> [String] {
        var out: [String] = [String]()
        var storeStr = ""
        for str in Array(self) {
            if by.contains(str) {
                out.append(storeStr)
                storeStr.removeAll()
                continue
            }
            storeStr.append(str)
        }
        return out
    }
    
    func componentSeparated1(by: String) -> [String] {
        var separateList: [String] = componentSeparate(by: by).map { "\($0)\(by)" }
        separateList[separateList.count-1].removeLast(by.count)
        return separateList
    }
    
    func componentSeparated2(by: String) -> [String] {
        if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
        var separateList: [String] = componentSeparate(by: by).map { "\($0)\(by)" }
        separateList[separateList.count-1].removeLast(by.count)
        return separateList
    }
    
    func componentSeparated3(by: String) -> [String] {
        if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
        var separateList: [String] = componentSeparate(by: by).map {"\($0)\(by)"}.filter {$0 != "-"}
        separateList[separateList.count-1].removeLast(by.count)
        return separateList
    }
    
    func componentSeparated4(by: String) -> [String] {
        if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
        let separateList: [String] = componentSeparate(by: by).map {"\($0)\(by)"}.filter {$0 != "-"}
        return separateList
    }
}

print("This-is-a-sentence-".componentSeparated1(by: "-"))
print("".componentSeparated2(by: "-"))
print("This-is-a-sentence-".componentSeparated3(by: "-"))
print("This-is-a-sentence-".componentSeparated4(by: "-"))
输出:

["This-", "is-", "a-", "sentence-", ""]
[]
["This-", "is-", "a-", "sentence"]
["This-", "is-", "a-", "sentence-"]

这将导致“-”是一个空的字符串,如果没有找到任何“--”,则会导致相同的字符串加上“--”。非本地
Swift
。这对OP来说可能并不重要,但对未来的读者来说值得一提。顺便说一下,你的方法没有返回<代码> [“这个-”,“是-”,“A -”,“句子-”] /<代码>注意,这将需要基础。不是土生土长的斯威夫特。如果原始字符串为空,这也会导致
[“”]
的结果。如果separateList.index.dropLast()中的索引字符串以“-”结尾,则还会向结果中添加一个空字符串。{
extension String {
    func componentSeparate(by: String) -> [String] {
        var out: [String] = [String]()
        var storeStr = ""
        for str in Array(self) {
            if by.contains(str) {
                out.append(storeStr)
                storeStr.removeAll()
                continue
            }
            storeStr.append(str)
        }
        return out
    }
    
    func componentSeparated1(by: String) -> [String] {
        var separateList: [String] = componentSeparate(by: by).map { "\($0)\(by)" }
        separateList[separateList.count-1].removeLast(by.count)
        return separateList
    }
    
    func componentSeparated2(by: String) -> [String] {
        if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
        var separateList: [String] = componentSeparate(by: by).map { "\($0)\(by)" }
        separateList[separateList.count-1].removeLast(by.count)
        return separateList
    }
    
    func componentSeparated3(by: String) -> [String] {
        if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
        var separateList: [String] = componentSeparate(by: by).map {"\($0)\(by)"}.filter {$0 != "-"}
        separateList[separateList.count-1].removeLast(by.count)
        return separateList
    }
    
    func componentSeparated4(by: String) -> [String] {
        if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
        let separateList: [String] = componentSeparate(by: by).map {"\($0)\(by)"}.filter {$0 != "-"}
        return separateList
    }
}

print("This-is-a-sentence-".componentSeparated1(by: "-"))
print("".componentSeparated2(by: "-"))
print("This-is-a-sentence-".componentSeparated3(by: "-"))
print("This-is-a-sentence-".componentSeparated4(by: "-"))
["This-", "is-", "a-", "sentence-", ""]
[]
["This-", "is-", "a-", "sentence"]
["This-", "is-", "a-", "sentence-"]