我想用*替换一个字符串中除了最后4个字符之外的所有字符。
在Objective-C中,NSString类中有一个方法replaceStringWithCharactersInRange:withString:
,我会给它一个范围(0,[string length]-4)
和字符串@"*"
。它将把123456789ABCD修改为*ABCD,而我要做到的是********ABCD。我知道它用字符串对象替换了我指定的范围。如何实现?
我想用*替换一个字符串中除了最后4个字符之外的所有字符。
在Objective-C中,NSString类中有一个方法replaceStringWithCharactersInRange:withString:
,我会给它一个范围(0,[string length]-4)
和字符串@"*"
。它将把123456789ABCD修改为*ABCD,而我要做到的是********ABCD。我知道它用字符串对象替换了我指定的范围。如何实现?
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
NSRange r = NSMakeRange(0, [str1 length] - 4);
[str1 replaceCharactersInRange:r withString:[[NSString string] stringByPaddingToLength:r.length withString:@"*" startingAtIndex:0]];
NSLog(@"%@",str1);
这看起来像是一个简单的问题...获取第一部分字符串并将其与最后四个字符附加返回。
这里有一个返回所需字符串的函数:
-(NSString *)neededStringWithString:(NSString *)aString {
// if the string has less than or 4 characters, return nil
if([aString length] <= 4) {
return nil;
}
NSUInteger countOfCharToReplace = [aString length] - 4;
NSString *firstPart = @"*";
while(--countOfCharToReplace) {
firstPart = [firstPart stringByAppendingString:@"*"];
}
// range for the last four
NSRange lastFourRange = NSMakeRange([aString length] - 4, 4);
// return the combined string
return [firstPart stringByAppendingString:
[aString substringWithRange:lastFourRange]];
}
NSInteger starUpTo = [string length] - 4;
if (starUpTo > 0) {
NSString *stars = [@"" stringByPaddingToLength:starUpTo withString:@"*" startingAtIndex:0];
return [string stringByReplacingCharactersInRange:NSMakeRange(0, starUpTo) withString:stars];
} else {
return string;
}
[theString substringToIndex:[theString length]-4]
来获取字符串的前半部分,然后再用 [theString length]-4 个星号与后半部分组合起来。也许有更简单的方法来实现这个功能...NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
[str1 replaceCharactersInRange:NSMakeRange(0, [str1 length] - 4) withString:@"*"];
NSLog(@"%@",str1);
它可以工作
正则表达式在iOS7上无法工作,但也许这可以帮助:
- (NSString *)encryptString:(NSString *)pass {
NSMutableString *secret = [NSMutableString new];
for (int i=0; i<[pass length]; i++) {
[secret appendString:@"*"];
}
return secret;
}