String 替换swift 3字符串中的字符
我需要一个函数将数字0..9连续替换为字符a..J。 我怎么能用Swift 3写呢? Swift 3字符串操作非常奇怪:|String 替换swift 3字符串中的字符,string,swift3,String,Swift3,我需要一个函数将数字0..9连续替换为字符a..J。 我怎么能用Swift 3写呢? Swift 3字符串操作非常奇怪:| 我尝试访问字符,然后添加和偏移(移位)字符,但没有成功。以下是解决您的问题的可能方法,也是Unicode安全的: let string = "0123456789 abc xyz 9876543210" // upper case A...J use 65; lower case a...j use 97 let shift = 65 let convertedString
我尝试访问字符,然后添加和偏移(移位)字符,但没有成功。以下是解决您的问题的可能方法,也是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,其他所有字符保持不变
实施
对于大字符串,出于性能原因,请使用惰性
字符集合。非惰性数组将创建一个中间数组
从一个字符到另一个字符的映射过程如下:
Int
(此处Int?
)
1.1如果失败(为nil
),则nil合并运算符(??
)将进入播放,并返回输入字符$0
)现在通过其(移位的)ASCII表示形式转换回字符字符串
。草签人的Swifts声明:
public init<S : Sequence>(_ characters: S)
where S.Iterator.Element == Character { ... }
public init(uu个字符:S)
其中S.Iterator.Element==字符{…}
看看你尝试了什么会很有帮助的你为什么用
lazy
映射它?这样做的好处是什么?@NoahWilder简言之:如果我们不使用lazy
,我们将创建一个中间字符数组,如果字符串一开始很长,则需要大量内存。有关完整说明,请参见上面的“实施”部分。