美文网首页iOS相关
iOS开发: 移除字符串末尾多种不同子字符串

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

作者: 伯wen | 来源:发表于2018-07-26 17:31 被阅读22次
    • 开发中经常出现需要移除字符串末尾的某些子字符串的情况, 比如说发布评论功能, 如果评论功能的末尾有换行符(\n), 那么就需要全部移除掉

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

    • 方法实现:
    /**
     移除结尾的子字符串
     */
    - (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 为 这里是评论内容
    

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

    • 如果用户发布评论的时候, 在内容的结尾出现了空格和换行符混搭的情况(\n), 可以使用下面的方法一起移除
    • 方法实现:
    /**
     移除结尾的子字符串, 使用数组传递多个
     */
    - (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 为 这里是评论内容
    

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

    • 上面的removeLastSubStringsArray方法需要传入一个字符串数组, 这里新定义一个removeLastSubStrings方法, 只需要传入数量不定的可变参数即可
    • 方法定义:
    /**
     移除结尾的子字符串, 可以输入多个
     */
    - (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;
    }
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/teobmftx.html