将字符串拆分为数组并对每个字符执行特定操作Swift

问题描述:

我有字符串,类似于(495)_-___-____。这是电话号码的掩码。我有文件名为InputMask将字符串拆分为数组并对每个字符执行特定操作Swift

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

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

如何执行此拆分字符串数组和使用映射函数形成一个新的数组?

+0

你可以做一个新的字符串,而遍历这个字符串剧中人物。当你遇到一个角色时,你可以应用你的规则 – prabodhprakash

+0

你确定在开始时有一个不平衡的'{'? – Sweeper

+0

事实上,如果'_'的位置是恒定的,那么您可以在该位置上执行掩码。 – prabodhprakash

这里是一个解决方案:

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)。

这里是不使用高阶函数另一种解决方案,但国际海事组织是简单的:

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

同意,如果解决'地图'不是解决问题的绝对标准,解决它使用简单的'for'循环会更有意义。 – prabodhprakash

+0

@prabodhprakash是我同意,但我想我可以使它更简单,更清洁通过使用地图 –

+0

@Sweeper感谢它的工作,但我仍然想要解决高阶函数,因为如果你掌握它,这将节省您的时间,将少一些码。 –