如何屏蔽String以仅显示最后3个字符?

时间:2017-05-19 11:18:52

标签: swift string masking

我只是试图掩盖如下字符串,但在做了一些搜索和研究之后我找不到我想要的东西。

字符串a =" 0123456789" masked =" xxxxxxx789"

我在这个问题http://stackoverflow.com/questions/41224637/masking-first-and-last-name-string-with中修改了解决方案,但它只是更改了与模式不匹配的字符串。我不知道如何改变模式以符合我的意思。

3 个答案:

答案 0 :(得分:6)

您可以使用集合方法suffix(_ maxLength: Int)获取字符串的最后3个字符,并填充重复“x”的字符串的其他部分:

编辑/更新

Swift 4或更高版本

extension StringProtocol {
    var masked: String {
        return String(repeating: "•", count: Swift.max(0, count-3)) + suffix(3)
    }
}
let string = "0123456789"
print(string.masked)   // "•••••••789\n"

答案 1 :(得分:0)

这完全符合您的要求:

let name = "0123456789"
let conditionIndex = name.characters.count - 3
let maskedName = String(name.characters.enumerated().map { (index, element) -> Character in
    return index < conditionIndex ? "x" : element
})
print("Masked Name: ", maskedName) // xxxxxxx789

这里发生的是你使用enumerated()方法得到字符串的字符数组,然后根据条件将每个字符映射到一个值:

  • 如果角色的索引小于condtionIndex,我们会用x(掩码)替换该角色。
  • 否则,我们只是保留角色。

答案 2 :(得分:-2)

你可以用这个

    NSString *phone = @"0123456789";

    NSString *lastChr = [phone substringFromIndex: [phone length] - 3];

    NSMutableString *mask = [[NSMutableString alloc]init];

    for (int i=0; i<[phone length]-3; i++) {
        [mask appendString:@"*"];

    }
    [mask appendString:lastChr];