2015-07-03 8 views
7

Ich habe eine lange Zeichenfolge wie folgt:Split String nach: und vorher?

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

i die Zeichenfolge nach dem geteilt werden soll: und vor? . So will das ich in einem Array haben:

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

ich weiß, dass ich das tun kann:

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

aber es ist nicht genug. Wie kann ich das bitte tun? Jede Hilfe wird zu schätzen wissen!

Antwort

2

Eine weitere Option NSRegularExpression Klasse verwenden könnte.

Mit diesem Muster:

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

Beispielcode:

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]); 
    } 
} 

Ausgang:

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 
1

Verwenden Sie NSScanner, um die Zeichenfolge zu durchsuchen und nach : und ? Tags zu suchen. Sie können den nicht gewünschten Text verwerfen und die Teile, die Sie bearbeiten (basierend auf dem gefundenen Tag), erfassen und zu einem Array hinzufügen.

1

dies versuchen,

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); 
+0

App beenden aufgrund nicht abgefangene Ausnahme 'NSRangeException', Grund: ‚*** - [__NSCFString substringToIndex:]: Index 9223372036854775807 außerhalb der Grenzen; String-Länge 8 ' –

+0

Sie benötigen einige Abhilfe Code, es ist nicht getestet Code. –

1

einfacher zu sein, können Sie den folgenden Code versuchen:

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); 
+0

ii Erhalten Sie die gleiche Zeichenfolge im Array –

+0

Versuchen Sie die bearbeitete Antwort – danialzahid94