Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用隐藏名字和姓氏字符串*_Swift_Swift3 - Fatal编程技术网

Swift 使用隐藏名字和姓氏字符串*

Swift 使用隐藏名字和姓氏字符串*,swift,swift3,Swift,Swift3,我有一个由名字和姓氏组合而成的字符串: 约翰尼塔克 我想像Swift 3中那样屏蔽该字符串: J*******T*** 如何执行此操作?例如,您可以对小写字符使用模式匹配,并将与模式匹配的字符替换为星号字符(*): 如果目的不是用*替换小写字符,而是屏蔽所有不是给定单词第一个的字符(例如,特定的分隔符“”),则可以用分隔符分隔字符串名称,并对除首字母以外的所有分隔单词应用屏蔽(子名称),后跟最终重构屏蔽字符串: import Foundation let name = "johnny luck

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

约翰尼塔克

我想像Swift 3中那样屏蔽该字符串:

J*******T***


如何执行此操作?

例如,您可以对小写字符使用模式匹配,并将与模式匹配的字符替换为星号字符(
*
):

如果目的不是用
*
替换小写字符,而是屏蔽所有不是给定单词第一个的字符(例如,特定的分隔符
“”
),则可以用分隔符分隔
字符串
名称,并对除首字母以外的所有分隔单词应用屏蔽(子名称),后跟最终重构屏蔽字符串:

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()
调用上述命令。

例如,您可以对小写字符使用模式匹配,并将与模式匹配的字符替换为星号字符(
*
):

如果目的不是用
*
替换小写字符,而是屏蔽所有不是给定单词第一个的字符(例如,特定的分隔符
“”
),则可以用分隔符分隔
字符串
名称,并对除首字母以外的所有分隔单词应用屏蔽(子名称),后跟最终重构屏蔽字符串:

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()
调用即可。

一个非常简单的解决方案:

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
    }
}
(拆分为单词,过滤掉空单词,为单词中的每个字符编制索引,映射到星号,再次加入全名)


一个非常简单的解决方案:

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
    }
}
(拆分为单词,过滤掉空单词,为单词中的每个字符编制索引,映射到星号,再次加入全名)


如果您打算用星号替换每个单词中除第一个字符外的每个字符,那么 另一种可能的解决办法是:

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
    }
}

如果您打算用星号替换每个单词中除第一个字符外的每个字符,那么 另一种可能的解决办法是:

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
    }
}

请展示您尝试过的内容。如果有中间名(可能缩写或不缩写)怎么办?汉语等外语名称怎么办?@shallowThought如果您不知道从哪里开始,很难展示一些内容。@mTuran这是一个很酷的问题:)请展示您尝试过的内容。如果有中间名怎么办(缩写与否)?汉语等外语名称如何?@shallowthough如果你不知道从哪里开始,很难显示一些东西。@mTuran这是一个很酷的问题:)如果第一个字符是小写字母,它将不起作用,对吗?另一种方法是将字符串拆分,将第一个字母大写,然后将其星号去掉。您可以使用
string
@AhmadF
NSString
character
(以前称为NSCharacter)的内置方法来实现这一点还有扩展字符串方法如果第一个字符是小写字母,它就不起作用了,对吗?另一种方法是将字符串拆分,第一个字母大写,然后将它们星号出来。你可以使用内置的
string
@AhmadF
NSString
character
(以前的NSCharacter)方法来实现这一点还有扩展字符串方法