美文网首页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