替换swift 3字符串中的字符

时间:2016-09-14 14:32:16

标签: string swift3

我需要一个函数来连续替换数字0..9和字符A..J。 如何在Swift 3中编写它? Swift 3字符串操作非常奇怪:| 我尝试访问字符,然后添加和偏移(移位)字符,但没有成功。

1 个答案:

答案 0 :(得分:4)

以下是您的问题的可能解决方案,也是Unicode安全的:

let string = "0123456789 abc xyz 9876543210"
// upper case A...J use 65; lower case a...j use 97
let shift = 65
let convertedString = String(string.characters.lazy.map{ char in
    Int(String(char)).map{ Character(UnicodeScalar($0 + shift)!) } ?? char
})

解释

思想/问题

将字符串的每个字符映射到另一个(或相同的)字符:0 ... 9 - > A ...... J,其他一切都待在了

实施

出于大字符串的性能原因,请使用lazy字符集。非懒惰的人会创建一个中间Array

从一个角色到另一个角色的映射将经历以下过程:

  1. 尝试将字符转换为Int(此处Int?

    1.1如果失败(nil),则无合并运算符(??)进入播放并返回输入字符

  2. Int值($0)现在通过其(移位)ASCII表示转换回Character ASCII Table

  3. 将延迟映射的集合转换为String。 Swift声明初始化器:

    public init<S : Sequence>(_ characters: S)
        where S.Iterator.Element == Character { ... }