【问题标题】:Split string after : and before?在 : 之后和之前拆分字符串?
【发布时间】:2015-07-03 06:33:56
【问题描述】:

我有一个像这样的长字符串:

je!tress:e?tu!tress:es?il!tress:e?nous!tress:ons?vous!tress:ez?ils!tress:ent?

我想在 : 之后和之前拆分字符串? .所以我想把这个放到数组中:

{e,es,e,ons,ez,en}

我知道我可以做到:

 NSArray *subStrings = [stringToChange componentsSeparatedByString:@":"];

但这还不够。 请问我该怎么做?任何帮助将不胜感激!

【问题讨论】:

    标签: ios objective-c nsstring


    【解决方案1】:

    另一种选择是使用NSRegularExpression 类。

    使用这种模式:

    \\:([^\?]+)\?
    

    示例代码:

    NSString *sample  = @"je!tress:e?tu!tress:es?il!tress:e?nous!tress:ons?vous!tress:ez?ils!tress:ent?";
    NSString *pattern = @"\\:([^\?]+)\?";
    
    NSError *error = NULL;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    
    
    NSArray *matches = [regex matchesInString:sample
                                      options:0
                                        range:NSMakeRange(0, [sample length])];
    if(!error && [matches count] > 0) {
        for (NSTextCheckingResult *match in matches) {
            NSRange matchRange = [match range];
            NSLog(@"%@" ,[sample substringWithRange:matchRange]);
        }
    }
    

    输出:

    2015-07-03 12:16:39.037 TestRegex[3479:48301] :e
    2015-07-03 12:16:39.039 TestRegex[3479:48301] :es
    2015-07-03 12:16:39.039 TestRegex[3479:48301] :e
    2015-07-03 12:16:39.040 TestRegex[3479:48301] :ons
    2015-07-03 12:16:39.040 TestRegex[3479:48301] :ez
    2015-07-03 12:16:39.040 TestRegex[3479:48301] :ent
    

    【讨论】:

      【解决方案2】:

      使用NSScanner 解析字符串,搜索:? 标签。您可以丢弃不需要的文本并捕获您所做的部分(基于您找到的标签)并将它们添加到数组中。

      【讨论】:

        【解决方案3】:

        试试这个,

          NSString *names = @"je!tress:e?tu!tress:es?il!tress:e?nous!tress:ons?vous!tress:ez?ils!tress:ent?";
        NSArray *namesarray = [names componentsSeparatedByString:@":"];
        NSMutableArray *desiredArray = [[NSMutableArray alloc] initWithCapacity:0];
        [namesarray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        NSRange rangeofsign = [(NSString*)obj rangeOfString:@"?"];
        NSString *extractedName = [(NSString*)obj substringToIndex:rangeofsign.location];
        [desiredArray addObject:extractedName];
         }];
        NSLog(@"%@",desiredArray);
        

        【讨论】:

        • 由于未捕获的异常'NSRangeException'而终止应用程序,原因:'*** - [__NSCFString substringToIndex:]:索引9223372036854775807越界;字符串长度 8'
        • 您需要一些解决方法代码,它不是经过测试的代码。
        【解决方案4】:

        为了更简单,你可以试试下面的代码:

        NSString *string = @"je!tress:e?tu!tress:es?il!tress:e?nous!tress:ons?vous!tress:ez?ils!tress:ent?";
        NSArray *firstArray = [string componentsSeparatedByString:@":"];
        NSMutableArray *finalArray = [[NSMutableArray alloc] init];
        for (NSString *newString in firstArray) {
            NSArray *tempArray = [newString componentsSeparatedByString:@"?"];
            if ([tempArray count] > 1) {
                [finalArray addObject:[tempArray firstObject]];
            }
        }
        NSLog(@"%@",finalArray);
        

        【讨论】:

        • ii 在数组中得到相同的字符串
        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多