Die Idee mit componentsSeparatedByCharactersInSet ist sehr fein. Ich würde aber trotzdem einen Scanner nehmen und einfach abwechselnd mit scanUpToCharactersInSet: und scanInt: durchlaufen bis der String durch ist. Dann hat man nicht die leeren Einträge.
Beide Ansätze haben einen Haken: Sie funktionieren nicht mit negativen Zahlen. Einfach ein Minuszeichen in den CharacterSet aufzunehmen geht auch nicht immer: Das Minus sollte nur berücksichtigt werden, wenn danach eine Zahl folgt. Das müsste man in einer NSScanner-Schleife abfangen.
Etwa so:
Alles anzeigen
Edit: Es geht noch einfacher, ohne CharSet:
Beide Ansätze haben einen Haken: Sie funktionieren nicht mit negativen Zahlen. Einfach ein Minuszeichen in den CharacterSet aufzunehmen geht auch nicht immer: Das Minus sollte nur berücksichtigt werden, wenn danach eine Zahl folgt. Das müsste man in einer NSScanner-Schleife abfangen.
Etwa so:
Quellcode
- NSString* toScan = @"123 (-456)";
- NSCharacterSet* digitSet = [NSCharacterSet characterSetWithCharactersInString:@"-0123456789"];
- NSScanner* scanner = [NSScanner scannerWithString:toScan];
- NSMutableArray* integers = [NSMutableArray array];
- while (![scanner isAtEnd]) {
- [scanner scanUpToCharactersFromSet:digitSet intoString:nil];
- int i;
- if ([scanner scanInt:&i]) {
- [integers addObject:[NSNumber numberWithInt:i]];
- } else {
- if (![scanner isAtEnd]) {
- [scanner setScanLocation:[scanner scanLocation]+1];
- }
- }
- }
- NSLog(@"ints: %@",integers);
Edit: Es geht noch einfacher, ohne CharSet:
Quellcode
- NSString* toScan = @"123 (-456)";
- NSScanner* scanner = [NSScanner scannerWithString:toScan];
- NSMutableArray* integers = [NSMutableArray array];
- while (![scanner isAtEnd]) {
- int i;
- if ([scanner scanInt:&i]) [integers addObject:[NSNumber numberWithInt:i]];
- else [scanner setScanLocation:[scanner scanLocation]+1];
- }
- NSLog(@"ints: %@",integers);
Multigrad - 360°-Produktfotografie für den Mac
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von mattik ()