Objetivo C: Cómo tomar un número después de una cadena secundaria desde cadena

Tengo una larga cadena como se muestra a continuación.

Planee asistir para proporcionar actualización al código existente

reunión matutina a los miembros del equipo Acoomdate Bum

Número de reunión: 457 231 123


Para join a esta reunión

  1. ir a http://domainname.com
  2. introducir la contraseña

Ahora quiero tomar el número después del text "Número de reunión", es decir 457 231 123

Cualquier ayuda por favor Gracias

EDITAR

Digamos que tengo una string

NSString *myString = @"Please plan to attend to provide upgrade to existing code morning meeting to acoomdate bum team members Meeting Number: 457 231 123 ----------------------------------------------------- to join this meeting ------------------------------------------------------ 1. go to http://domainname.com 2. enter password" 

Puede usar expresiones regulares para capturar los numbers también (suponiendo que solo hay caracteres numéricos y espacios en el resultado, y siempre está el prefijo "Número de reunión:"):

 NSString *text = @"Please plan to attend to provide upgrade to existing code\nmorning meeting to acoomdate bum team members\nMeeting Number: 457 231 123\nTo join this meeting\n\ngo to http://domainname.com\nenter password"; NSError *error = nil; NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"Meeting Number: ([0-9 ]+)" options:NSRegularExpressionCaseInsensitive error:&error]; NSArray *matches = [regex matchesInString:text options:0 range:NSMakeRange(0, [text length])]; for (NSTextCheckingResult *match in matches) { NSRange matchRange = [match rangeAtIndex:1]; NSString *result = [text substringWithRange:matchRange]; // Here is the result } 

Esto se puede usar para analizar múltiples inputs juntas ya que aquí tenemos un bucle. Si los requisitos son solo para analizar una input, reemplace el código después de la statement de la expresión regular con:

 NSTextCheckingResult *match = [regex firstMatchInString:text options:0 range:NSMakeRange(0, [text length])]; if (match) { NSRange matchRange = [match rangeAtIndex:1]; NSString *result = [text substringWithRange:matchRange]; } 

Quieres NSScanner . Está específicamente para este tipo de cosas.

 NSScanner *scanner = [NSScanner scannerWithString:yourString]; NSString *prefix = @"Meeting number: "; NSString *numbers; [scanner scanUpToString:prefix intoString:NULL]; [scanner scanString:prefix intoString:NULL]; [scanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet] intoString:&numbers]; // numbers now contains the numbers you want. 

(Esto puede ser trivialmente adaptado para encontrar cualquier número haciendo scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] lugar de las dos líneas con la cadena de prefijo).

Esto lo hará (con muy poca generalidad):

 NSRange promptRange = [bigString rangeOfString:@"Meeting Number: "]; NSRange numberRange = NSMakeRange(promptRange.location + promptRange.length, 11); NSString *answer = [bigString substringWithRange:numberRange]; 

Puede ser que puedas usar algo como:

 NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; int numberValue = [[@"Meeting Number: 457 231 123" stringByTrimmingCharactersInSet:nonNumberSet] intValue]; 

Editar: para todos los numbers:

 NSCharacterSet *nonNumberSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; int numberValue = [[[@"Meeting Number: 457 231 123" componentsSeparatedByCharactersInSet:nonNumberSet] componentsJoinedByString:@""] intValue]; 

Esto debería hacerlo, si quieres un número:

 static int ReadMeetingNumber(NSString * string) { // ARC: // locate the line NSString * const prefix = @"Meeting Number: "; NSMutableString * meetingNumberLine = nil; for (NSString * line in [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]) { if ([line hasPrefix:prefix]) { meetingNumberLine = [line mutableCopy]; } } if (nil == meetingNumberLine) { return nil; } // trim and get int value [meetingNumberLine deleteCharactersInRange:NSMakeRange(0, prefix.length)]; [meetingNumberLine replaceOccurrencesOfString:@" " withString:@"" options:0 range:NSMakeRange(0, meetingNumberLine.length)]; return meetingNumberLine.intValue; } 

Esto debería hacerlo, si quiere ubicar los numbers individuales :

 // ARC: // Returns an NSArray of NSNumbers static NSArray * ReadMeetingNumbers(NSString * string) { // locate the line NSString * const prefix = @"Meeting Number: "; NSMutableString * meetingNumberLine = nil; for (NSString * line in [string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]) { if ([line hasPrefix:prefix]) { meetingNumberLine = [line mutableCopy]; } } if (nil == meetingNumberLine) { return nil; } [meetingNumberLine deleteCharactersInRange:NSMakeRange(0, prefix.length)]; // locate the numbers: NSMutableArray * results = [NSMutableArray new]; for (NSString * at in [meetingNumberLine componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]) { const int intValue = at.intValue; if (0 != intValue) { [results addObject:[NSNumber numberWithInt:intValue]]; } } return [results copy]; } 

Puede realizar la tarea anterior escaneando todos los numbers en la secuencia anterior utilizando el siguiente código.

 NSString * inputString = @"Please plan to attend to provide upgrade to existing code morning meeting to acoomdate bum team membersMeeting Number: 457 231 123To join this meeting go tohttp://domainname.comenter password"; // Your input string NSString * subStr = [inputString substringWithRange:NSMakeRange([inputString rangeOfString:@"Meeting Number:"].location, 27)]; NSString *number = [[subStr componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""]; // Scans all numbers from input string NSLog(@"%@",number); // Your requinetworking output printed in console 

tomar en cadena al igual que

 NSString *str = @"Meeting Number: 457 231 123"; 

separado por tu string

 NSArray *theList = [str componentsSeparatedByString:@":"]; NSString *getStr = [theList objectAtIndex:1]; [getStr stringByReplacingOccurrencesOfString:@" " withString:@""];