Arrays 将字符串拆分为数组,并对每个字符执行特定操作
我有字符串,类似于Arrays 将字符串拆分为数组,并对每个字符执行特定操作,arrays,swift,string,Arrays,Swift,String,我有字符串,类似于(495)\uu-\ u-\ uu-\ uu-。那是电话号码的面具。我有一个图书馆的名字 该库有特定的规则来形成文本字段的掩码。因此,我需要将上面的掩码转换为{495[0][0][0][0][0][0],这将是正确的格式 所以,我想知道我是否可以通过map这样的函数来实现这一点?我只需要将字符串(495)\u-\ u-\ u-\ u-\ u-\ u-\ u-分解为字符数组。如果该字符等于“\u”或“*”,用户将在文本字段中添加字符,所以我只需将其替换为[0]。其他字符是符号,应
(495)\uu-\ u-\ uu-\ uu-
。那是电话号码的面具。我有一个图书馆的名字
该库有特定的规则来形成文本字段的掩码。因此,我需要将上面的掩码转换为{495[0][0][0][0][0][0]
,这将是正确的格式
所以,我想知道我是否可以通过map这样的函数来实现这一点?我只需要将字符串(495)\u-\ u-\ u-\ u-\ u-\ u-\ u-
分解为字符数组。如果该字符等于“\u”或“*”,用户将在文本字段中添加字符,所以我只需将其替换为[0]。其他字符是符号,应该保持不变
如何使用映射函数将字符串拆分为数组并形成新数组?以下是一个解决方案:
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: "_")
您可以在对该字符串的字符进行迭代时创建一个新字符串。当您遇到一个字符时,您可以应用您的规则。您确定在开始时有一个不平衡的
{
吗?事实上,如果\
的位置是常量,您可以在该位置上执行掩码。@Sweeper{没问题。@prabodhprakash是的,但我问我是否可以用map函数来解决这个问题。如果用map
解决问题不是解决问题的绝对标准,那么用simplefor
循环来解决这个问题会更有意义。@prabodhprakash是的,我同意,但我想我可以用它使问题变得更简单、更清晰map@Sweeper谢谢,这是工作b但我仍然希望解决方案具有高阶函数,因为如果您掌握了它,将节省您的时间并减少代码。@EvgeniyKleban我认为没有更简单的方法使用map
。但正如您在我的编辑中看到的,您可以使用2个replaceOccurrence
调用。