swift - 用 * 屏蔽名字和姓氏字符串

标签 swift swift3

我有一个由名字和姓氏组合而成的字符串:

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/

相关文章:

swift - 基本 URL(string,relativeTo) 未正确输出

ios - WebView VC Swift 中出现意外的标题

ios - 如何快速隐藏 UIPopoverPresentationController 的模糊?

objective-c - 使用自定义形状裁剪照片

Swift 导航栏按钮和标题不出现

swift - 如何在 button.addTarget Action 中发送多个按钮? swift 3

ios - Google map 无法缩放到我当前的位置

swift - 为什么 Calendar.date(from : DateComponents) adding time?

ios - iPad 2 上的节点位置错误

swift - 从 swift 2.3 迁移到 swift 3 时出错