【问题标题】:Split string to array and perform specific action for each character Swift将字符串拆分为数组并为每个字符 Swift 执行特定操作
【发布时间】:2017-09-26 05:55:12
【问题描述】:

我有字符串,比如(495)_-___-____。那是电话号码的掩码。我有一个名为 InputMask

的库

该库有特定的规则来形成文本字段的掩码。所以,我需要以某种方式将上面的掩码转换为{495[0]_[0][0][0]_[0][0][0],这将是正确的格式。

所以,我想知道我是否可以通过地图等功能实现这一点?我只需要将字符串(495)_-___-____ 分解为字符数组。如果该字符等于“_”或“*”,即用户将在文本字段上放置字符的位置,那么我只需将其替换为 [0]。其他字符是符号应该保持不变。

如何将这个字符串拆分为Array并使用map函数形成一个新的数组?

【问题讨论】:

  • 你可以在迭代这个字符串的字符时创建一个新字符串。当你遇到一个角色时,你可以应用你的规则
  • 你确定开头有一个不平衡的{
  • 事实上,如果_的位置是不变的,你可以只对位置进行掩码。
  • @Sweeper { 没问题。
  • @prabodhprakash 是的,但我问我是否可以使用地图功能做到这一点

标签: arrays swift string


【解决方案1】:

这里有一个解决方案:

let mask = "(495)_-___-____"
// use mask.map in swift 4
let strings: [String] = mask.characters.map {
    char in
    if char == "_" {
        return "[0]"
    } else if char == "-" {
        return "_"
    } else {
        return char.description
    }
}


let finalResult = "{" + strings.joined()

如您所见,代码非常简单。 map 闭包内的代码很长,因此循环可能看起来更好(IMO)。

这是另一种不使用高阶函数的解决方案,但 IMO 更简单:

"{" + mask.replacingOccurrences(of: "_", with: "[0]")
    .replacingOccurrences(of: "-", with: "_")

【讨论】:

  • 同意,如果通过map 解决问题不是解决问题的绝对标准,那么使用简单的for 循环解决问题会更有意义。
  • @prabodhprakash 是的,我同意,但我想我可以通过使用地图使其更简单和更清洁
  • @Sweeper 感谢它的工作,但我仍然想要具有高阶函数的解决方案,因为如果你掌握了它,那将节省你的时间并且会减少代码。
  • @EvgeniyKleban 我认为map 没有更简单的方法。但正如您在我的编辑中看到的那样,您可以使用 2 个 replaceOccurrence 调用。
猜你喜欢
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 2012-02-22
相关资源
最近更新 更多