String nach Integers durchsuchen

  • 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:

    Quellcode

    1. NSString* toScan = @"123 (-456)";
    2. NSCharacterSet* digitSet = [NSCharacterSet characterSetWithCharactersInString:@"-0123456789"];
    3. NSScanner* scanner = [NSScanner scannerWithString:toScan];
    4. NSMutableArray* integers = [NSMutableArray array];
    5. while (![scanner isAtEnd]) {
    6. [scanner scanUpToCharactersFromSet:digitSet intoString:nil];
    7. int i;
    8. if ([scanner scanInt:&i]) {
    9. [integers addObject:[NSNumber numberWithInt:i]];
    10. } else {
    11. if (![scanner isAtEnd]) {
    12. [scanner setScanLocation:[scanner scanLocation]+1];
    13. }
    14. }
    15. }
    16. NSLog(@"ints: %@",integers);
    Alles anzeigen


    Edit: Es geht noch einfacher, ohne CharSet:

    Quellcode

    1. NSString* toScan = @"123 (-456)";
    2. NSScanner* scanner = [NSScanner scannerWithString:toScan];
    3. NSMutableArray* integers = [NSMutableArray array];
    4. while (![scanner isAtEnd]) {
    5. int i;
    6. if ([scanner scanInt:&i]) [integers addObject:[NSNumber numberWithInt:i]];
    7. else [scanner setScanLocation:[scanner scanLocation]+1];
    8. }
    9. NSLog(@"ints: %@",integers);
    Multigrad - 360°-Produktfotografie für den Mac

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von mattik ()

  • Guten Morgen !

    Nur zur Info: Diese Version funktioniert sehr wohl mit Leerzeichen und negativen Zahlen, aber eben nur mit 2 Werten und es gibt natürlich "schönere Lösungen" !

    Quellcode

    1. NSString *eingabe = @" -123 ( -567)";
    2. NSMutableArray *ausgabe = [NSMutableArray array];
    3. int x = 0;
    4. int y = 0;
    5. ausgabe = (NSMutableArray*)[eingabe componentsSeparatedByString:@"("];
    6. x = [[ausgabe objectAtIndex:0]intValue];
    7. y = [[ausgabe objectAtIndex:1]intValue];
    8. NSLog(@" X = %i Y = %i",x, y);
    Alles anzeigen