【问题标题】:How to separate a string in Swift 3 by a specific character如何在 Swift 3 中用特定字符分隔字符串
【发布时间】:2017-04-15 00:39:34
【问题描述】:

我正在使用 Swift 3 并且有一个包含 0 和 1 的长字符串。 前任。 "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000"

我试图把这个字符串分成两个数组,以确定有多少个 1 和 0 一个接一个地重复。

当我调用 let oneArray = binString.components(separatedBy: "0")let zeroArray = binString.components(separatedBy: "1") 方法时,我们为示例字符串获得的返回数组是:

["1111", "", "1111111111", "", "1111111111", "", "", "111", "", "", "", "", "", "", "", "", "111", "", "", "1111111111", "", "", "", "", "", "", "", "1111", "", "1111", "", "1111111111", "", "", "", "", "", "", "", "", "111", "", "", "1111111111", "", "1111", "", "1111", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""]

["", "", "", "", "00", "", "", "", "", "", "", "", "", "", "00", "", "", "", "", "", "", "", "", "", "000", "", "", "000000000", "", "", "000", "", "", "", "", "", "", "", "", "", "00000000", "", "", "", "00", "", "", "", "00", "", "", "", "", "", "", "", "", "", "000000000", "", "", "000", "", "", "", "", "", "", "", "", "", "00", "", "", "", "00", "", "", "", "0000000000000000000"]

而且我们不明白为什么我们不能只返回包含 0 和 1 的数组而不是空字符串作为数组元素。之前好像没有其他人问过这种问题,我们很困惑,因为这似乎是用于将字符串与字符分隔的通用方法。

我想知道如何按照我们想要的方式分隔这些字符串。这里的情况似乎很奇怪

【问题讨论】:

    标签: arrays swift string swift3


    【解决方案1】:

    分隔符字符串的每一次出现都会将原来的字符串分割成一个新的字符串,所以连续出现会导致空字符串。

    你已经接近你想要的了。只需在每行末尾添加 filter { !$0.isEmpty } 语句即可删除不需要的空字符串:

    let binString = "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000"
    
    let oneArray = binString.components(separatedBy: "0").filter { !$0.isEmpty }
    let zeroArray = binString.components(separatedBy: "1").filter { !$0.isEmpty }
    
    print(oneArray)
    print(zeroArray)
    

    输出:

    ["1111", "1111111111", "1111111111", "111", "111", "1111111111", "1111", "1111", "1111111111", "111", "1111111111", "1111", "1111"]
    ["00", "00", "000", "000000000", "000", "00000000", "00", "00", "000000000", "000", "00", "00", "0000000000000000000"]
    

    【讨论】:

    • 感谢@LeoDabus。你是对的。最好使用isEmpty 来测试空字符串。我更新了我的答案。
    【解决方案2】:

    组件函数使用字符作为分隔符,因此它不会将其包含在结果数组中,并将连续的分隔符视为空字符串元素。

    你可以这样做:

    let binary = "1111001111111111001111111111000111000000000111000111111111100000000111100111100111111111100000000011100011111111110011110011110000000000000000000"
    
    let series = binary.replacingOccurrences(of: "10", with: "1,0")  
                       .replacingOccurrences(of: "01", with: "0,1")
                       .components(separatedBy:",")
    

    通过在 1/0 系列中的每个中断之间插入一个逗号,您可以准确地在需要的位置获得分隔符。

    系列数组将交替包含连续的 1 和连续的 0。如果您希望将所有 1 和所有 0 组合在一起的系列进行排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      相关资源
      最近更新 更多