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

Swift 如何屏蔽字符串以仅显示最后3个字符?,swift,string,masking,Swift,String,Masking,我只是试着像下面那样屏蔽字符串,但在做了一些搜索和研究之后,我并没有找到我想要的 字符串a=“0123456789” 蒙面=“xxxxxxx 789” 我修改了这个问题的答案,但它只是改变了与模式不匹配的字符串。我不知道如何改变模式以符合我的意思 想要在obj C中使用此功能的人,可以使用此功能 NSString *phone = @"0123456789"; NSString *lastChr = [phone substringFromIndex: [phone lengt

我只是试着像下面那样屏蔽字符串,但在做了一些搜索和研究之后,我并没有找到我想要的

字符串a=“0123456789” 蒙面=“xxxxxxx 789”


我修改了这个问题的答案,但它只是改变了与模式不匹配的字符串。我不知道如何改变模式以符合我的意思

想要在obj C中使用此功能的人,可以使用此功能

    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];
NSString*phone=@“0123456789”;
NSString*lastChr=[phone substringfromfromindex:[phone length]-3];
NSMutableString*掩码=[[NSMutableString alloc]init];

对于(int i=0;i想要在obj C中使用此选项的人,可以使用此选项

    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];
NSString*phone=@“0123456789”;
NSString*lastChr=[phone substringfromfromindex:[phone length]-3];
NSMutableString*掩码=[[NSMutableString alloc]init];

对于(int i=0;i您可以使用collection方法
suffix(\umaxlength:int)
获取字符串的最后3个字符,然后重复“x”填充字符串的其他部分:


编辑/更新

Swift 4或更高版本

extension StringProtocol {
    var masked: String {
        return String(repeating: "•", count: Swift.max(0, count-3)) + suffix(3)
    }
}


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


编辑/更新

Swift 4或更高版本

extension StringProtocol {
    var masked: String {
        return String(repeating: "•", count: Swift.max(0, count-3)) + suffix(3)
    }
}


这正是您想要的:

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
let name=“0123456789”
让conditionIndex=name.characters.count-3
让maskedName=String(name.characters.enumerated().map{(index,element)->中的字符
返回索引<条件索引?:元素
})
打印(“蒙面名称:”,蒙面名称)//xxxxxxx 789
这里发生的事情是,您使用
enumerated()
方法获取字符串的字符数组,然后根据条件将每个字符映射到一个值:

  • 如果字符的索引小于
    conditionIndex
    ,我们将用
    x
    (掩码)替换该字符
  • 否则,我们就让角色保持原样

    • 这正是您想要的:

      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
      
      let name=“0123456789”
      让conditionIndex=name.characters.count-3
      让maskedName=String(name.characters.enumerated().map{(index,element)->中的字符
      返回索引<条件索引?:元素
      })
      打印(“蒙面名称:”,蒙面名称)//xxxxxxx 789
      
      这里发生的事情是,您使用
      enumerated()
      方法获取字符串的字符数组,然后根据条件将每个字符映射到一个值:

      • 如果字符的索引小于
        conditionIndex
        ,我们将用
        x
        (掩码)替换该字符
      • 否则,我们就让角色保持原样

      可能重复的请看这里,如何获取字符串的子字符串:现在您可以使用“x”来“填充”输入字符串总长度的其余部分。谢谢,我使用“string.replaceRange”,代码工作正常。可能重复的请看这里,如何获取字符串的子字符串:现在您可以“填充”输入字符串的剩余部分加上“x”谢谢,我用的是“string.replaceRange”,代码工作正常。这是Objective-C,不是Swift。问题用[Swift]标记。这是Objective-C,不是Swift。问题用[Swift]标记。谢谢,我是Swift新手,您的代码似乎比我上面的代码更简单,两者都是正确答案。谢谢,我是Swift新手,您的代码似乎比我上面的代码更简单,两者都是正确答案。