快速替换3字符串中的字符

阿夫拉希米

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

Q字节

这是一个对您的问题也可能是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(Here Int?

    1.1如果失败(是nil),则加入nil合并运算符(??)并返回输入字符

  2. Int值($0)现在通过其(移位的)ASCII表示形式转换回字符ASCII表

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章