我有一个由名字和姓氏组合而成的字符串:
Johnny Tuck
我想像 Swift 3 中那样屏蔽该字符串:
J***** T***
我该怎么做?
最佳答案
例如,您可以对小写字符使用模式匹配,并将与模式匹配的字符替换为星号字符 (*
):
let name = "Johnny Tuck"
let pattern = Character("a")..."z"
let maskedName = String(name.characters.map { pattern ~= $0 ? Character("*") : $0 })
print(maskedName) // J***** T***
如果目的不是用 *
替换小写字符,而是屏蔽所有不是给定单词第一个的字符(例如,特定分隔符 ""
),您可以用分隔符分隔 String
名称,并对除初始字符以外的所有分隔词(子名称)应用屏蔽,最后重建屏蔽字符串:
import Foundation
let name = "johnny lucky tuck"
let maskedName = name.components(separatedBy: " ")
.filter { !$0.isEmpty }.map { $0.characters }
.map { String($0.first!).uppercased() + String(repeating: "*", count: $0.dropFirst(1).count) }
.joined(separator: " ")
print(maskedName) // J***** L**** T***
请注意上面的 uppercased()
,它将初始非屏蔽字母设置为大写字母(即使最初不是)。如果您不希望这种大写,只需删除上面的 .uppercased()
调用即可。
关于swift - 用 * 屏蔽名字和姓氏字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224637/