1
A
回答
8
你可以例如使用小寫字符模式匹配和替換那些匹配星號字符圖案(*
)認爲:
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()
電話。
3
一個非常簡單的解決方案:
(拆分單詞,過濾掉空的話,指數的每一個字符的話,地圖星,再次加入到全名)
let fullname = "This Is My Name"
let result = fullname
.components(separatedBy: CharacterSet.whitespaces)
.filter { !$0.isEmpty }
.map { (name: String) in
let mappedCharacters = name.characters.enumerated().map { (index, letter) in
return (index == 0) ? letter : "*"
}
return String(mappedCharacters)
}
.joined(separator: " ")
print("Result:", result) // Result: T*** I* M* N***
1
如果你的目的是用星號來代替除了在每個單詞的首每個字符,那麼這將 是另一種可能的解決方案:
extension String {
/// Replace all characters except the first by a star.
func starredWord() -> String {
return String(characters.prefix(1) + characters.dropFirst().map { _ in "*" })
}
/// Star every "word" in a string.
func starred() -> String {
var result = ""
self.enumerateSubstrings(in: startIndex..<endIndex, options: .byWords) {
(s, range, enclosingRange, _) in
result +=
// Append the substring preceeding the word ...
self[enclosingRange.lowerBound..<range.lowerBound]
// ... the starred word ...
+ (s?.starredWord() ?? "")
// ... and the substring following the word.
+ self[range.upperBound..<enclosingRange.upperBound]
}
return result
}
}
這裏enumerateSubstrings
與.byWords
選項一起使用到 檢測當前語言環境中的單詞,即使它們由 標點符號分隔。
例子:
let name = "John M. Doe, sen."
print(name.starred())
// J*** M. D**, s**.
相關問題
- 1. 夾掩蔽與CAShapeLayer和UIBezierPath
- 2. 屏蔽字符串
- 3. 掩蔽Simulink塊:如何將掩碼參數解釋爲字符串?
- 4. 掩蔽雙重的過一個字符串
- 5. 掩蔽字段複製
- 6. 掩蔽keras BLSTM
- 7. 掩蔽NsImageView
- 8. 掩蔽影像
- 9. Python的掩蔽
- 10. 掩蔽在python
- 11. BezierPath和掩蔽
- 12. 計算與負數的操作首先在一個字符串
- 13. numpy.interp&掩蔽陣列
- 14. 掩蔽在OpenCV中
- 15. 在SVG中掩蔽?
- 16. Url掩蔽/重寫?
- 17. 如何掩蓋字符串?
- 18. 掩碼密碼字符串
- 19. 的.htaccess到目錄與掩蔽
- 20. 大寫首字母的姓
- 21. MS C#實現字符串首先檢查不可變基字符串的ReferenceEquals?
- 22. 使用2D掩模掩蔽BGR圖像
- 23. 「掩蔽」動畫? iPhone SDK
- 24. 透明PNG掩蔽在AS3
- 25. 掩蔽兩張圖片
- 26. 掩蔽SKSpriteNode作爲液體
- 27. OpenGl中的掩蔽區
- 28. 在OpenGL ES中掩蔽
- 29. 掩蔽+用CSS旋轉
- 30. 掩蔽的UIImage在TableViewCell
請出示你已經嘗試了什麼。 – shallowThought
如果有中間名(可以縮寫或不可以),該怎麼辦?外文名稱如中文怎麼樣? –
@shallow如果你不知道從哪裏開始,那麼很難展現出一些東西。 @ mTuran這是一個很酷的問題:) – Fluidity