iOS相关

iOS开发: 移除字符串末尾多种不同子字符串

2018-07-26  本文已影响22人  伯wen

一、移除字符串末尾出现的相同子字符串

/**
 移除结尾的子字符串
 */
- (NSString *)removeLastSubString:(NSString *)string
{
    NSString *result = self;
    if ([result hasSuffix:string]) {
        result = [result substringToIndex:self.length - string.length];
        result = [result removeLastSubString:string];
    }
    return result;
}
NSString *text = @"这里是评论内容\n\n\n\n"
text = [text removeLastSubString:@"\n"];
// text 为 这里是评论内容

二、移除字符串末尾出现的多种不同子字符串

/**
 移除结尾的子字符串, 使用数组传递多个
 */
- (NSString *)removeLastSubStringsArray:(NSArray<NSString *> *)strings {
    NSString *result = self;
    BOOL isHaveSubString = NO;
    for (int i = 0; i < strings.count; i++) {
        NSString *subString = strings[i];
        if ([result hasSuffix:subString]) {
            result = [result removeLastSubString:subString];
            isHaveSubString = YES;
        }
    }
    if (isHaveSubString) {
        result = [result removeLastSubStringsArray:strings];
    }
    return result;
}
NSString *text = @"这里是评论内容\n  \n \n \n  "
text = [text removeLastSubStringsArray:@[@"\n", @" "]];
// text 为 这里是评论内容

三、通过传入可变参数的方式, 移除字符串结尾多种子字符串

/**
 移除结尾的子字符串, 可以输入多个
 */
- (NSString *)removeLastSubStrings:(NSString *)string, ... NS_REQUIRES_NIL_TERMINATION
{
    NSMutableArray *tempArr = @[].mutableCopy;
    if (string) {
        // 取出第一个参数
        [tempArr addObject:string];
        // 定义一个指向个数可变的参数列表指针;
        va_list args;
        // 用于存放取出的参数
        NSString *arg;
        // 初始化变量刚定义的va_list变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
        va_start(args, string);
        // 遍历全部参数 va_arg返回可变的参数(a_arg的第二个参数是你要返回的参数的类型)
        while ((arg = va_arg(args, NSString *))) {
            [tempArr addObject:arg];
        }
        // 清空参数列表,并置参数指针args无效
        va_end(args);
    }
    
    return [self removeLastSubStringsArray:tempArr];
}
NSString *text = @"这里是评论内容\n  \n \n \n  "
text = [text removeLastSubStringsArray:@"\n", @" ", nil];
// text 为 这里是评论内容

结尾: 所有的方法整合



/**
 移除结尾的子字符串, 可以输入多个
 */
- (NSString *)removeLastSubStrings:(NSString *)string, ... NS_REQUIRES_NIL_TERMINATION
{
    NSMutableArray *tempArr = @[].mutableCopy;
    if (string) {
        // 取出第一个参数
        [tempArr addObject:string];
        // 定义一个指向个数可变的参数列表指针;
        va_list args;
        // 用于存放取出的参数
        NSString *arg;
        // 初始化变量刚定义的va_list变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
        va_start(args, string);
        // 遍历全部参数 va_arg返回可变的参数(a_arg的第二个参数是你要返回的参数的类型)
        while ((arg = va_arg(args, NSString *))) {
            [tempArr addObject:arg];
        }
        // 清空参数列表,并置参数指针args无效
        va_end(args);
    }
    
    return [self removeLastSubStringsArray:tempArr];
}

/**
 移除结尾的子字符串, 使用数组传递多个
 */
- (NSString *)removeLastSubStringsArray:(NSArray<NSString *> *)strings {
    NSString *result = self;
    BOOL isHaveSubString = NO;
    for (int i = 0; i < strings.count; i++) {
        NSString *subString = strings[i];
        if ([result hasSuffix:subString]) {
            result = [result removeLastSubString:subString];
            isHaveSubString = YES;
        }
    }
    if (isHaveSubString) {
        result = [result removeLastSubStringsArray:strings];
    }
    return result;
}

/**
 移除结尾的子字符串
 */
- (NSString *)removeLastSubString:(NSString *)string
{
    NSString *result = self;
    if ([result hasSuffix:string]) {
        result = [result substringToIndex:self.length - string.length];
        result = [result removeLastSubString:string];
    }
    return result;
}
上一篇 下一篇

猜你喜欢

热点阅读