替换NSString中的字符

时间:2011-10-04 15:44:12

标签: objective-c ios xcode macos

我正在尝试用*来替换字符串中除了最后4个之外的所有字符 在objective-c中,NSString类replaceStringWithCharactersInRange: withString:中有一个方法,我将使用字符串(0,[string length]-4)给它范围@"*")。这就是它的作用:123456789ABCD被修改为* ABCD,而我正在寻找制作******** ABCD。 我知道它替换了我用string对象指定的范围。如何做到这一点?

7 个答案:

答案 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个字符。有点粗糙,但完成工作