我正在尝试用*来替换字符串中除了最后4个之外的所有字符
在objective-c中,NSString类replaceStringWithCharactersInRange: withString:
中有一个方法,我将使用字符串(0,[string length]-4)
给它范围@"*"
)。这就是它的作用:123456789ABCD被修改为* ABCD,而我正在寻找制作******** ABCD。
我知道它替换了我用string对象指定的范围。如何做到这一点?
答案 0 :(得分:12)
NSError *error;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\d" options:NSRegularExpressionCaseInsensitive error:&error];
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"*"];
答案 1 :(得分:1)
这看起来像一个简单的问题......获取第一部分字符串并将其返回并附加最后四个字符 这是一个返回所需字符串的函数:
-(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]];
}
答案 2 :(得分:1)
Cocoa中最不直观的部分是创造重复的恒星而没有某种尴尬的循环。 stringByPaddingToLength:withString:startingAtIndex:
允许您创建任意长度的重复字符串,所以一旦有了这个,这是一个简单的解决方案:
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;
}
答案 3 :(得分:0)
您可以使用[theString substringToIndex:[theString length]-4]
获取字符串的第一部分,然后将[theString length] -4 *'与第二部分组合在一起。也许他们是一个更容易的方法来做到这一点..
答案 4 :(得分:0)
我不确定为什么接受的答案被接受,因为它只有在去年4号以外的所有内容都是数字时才有效。这是一个简单的方法:
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);
答案 5 :(得分:-1)
NSMutableString * str1 = [[NSMutableString alloc]initWithString:@"1234567890ABCD"];
[str1 replaceCharactersInRange:NSMakeRange(0, [str1 length] - 4) withString:@"*"];
NSLog(@"%@",str1);
它有效
答案 6 :(得分:-1)
正则表达式在iOS7上不起作用,但这可能会有所帮助:
- (NSString *)encryptString:(NSString *)pass {
NSMutableString *secret = [NSMutableString new];
for (int i=0; i<[pass length]; i++) {
[secret appendString:@"*"];
}
return secret;
}
在您的情况下,您应该停止替换最后4个字符。有点粗糙,但完成工作