verificar serie robado por numero comprobar check apple iphone objective-c ios nsstring nsnumber

por - numero de serie iphone robado



Objective-C: Encuentra nĂºmeros en una cadena (7)

¡De lejos la mejor solución! Creo que la expresión regular sería mejor, pero soy bastante sutil ;-) esto filtra TODOS los números y los combina, creando una nueva cadena. Si quieres dividir varios números, cámbialo un poco. ¡Y recuerda que cuando usas esto dentro de un gran ciclo, cuesta rendimiento!

NSString *str= @"bla bla bla #123 bla bla 789"; NSMutableString *newStr = [[NSMutableString alloc] init];; int j = [str length]; for (int i=0; i<j; i++) { if ([str characterAtIndex:i] >=48 && [str characterAtIndex:i] <=59) { [newStr appendFormat:@"%c",[str characterAtIndex:i]]; } } NSLog(@"%@ as int:%i", newStr, [newStr intValue]);

Tengo una cadena que contiene palabras y un número. ¿Cómo puedo extraer ese número de la cadena?

NSString *str = @"This is my string. #1234";

Me gustaría poder eliminar 1234 como int. La cadena tendrá diferentes números y palabras cada vez que la busque.

Ideas?


Aquí hay una solución basada en NSScanner :

// Input NSString *originalString = @"This is my string. #1234"; // Intermediate NSString *numberString; NSScanner *scanner = [NSScanner scannerWithString:originalString]; NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"]; // Throw away characters before the first number. [scanner scanUpToCharactersFromSet:numbers intoString:NULL]; // Collect numbers. [scanner scanCharactersFromSet:numbers intoString:&numberString]; // Result. int number = [numberString integerValue];

(Algunas de las muchas) suposiciones hechas aquí:

  • Los dígitos numéricos son 0-9, sin signo, sin punto decimal, sin miles de separadores, etc. Puede agregar caracteres de signo al conjunto de caracteres NSC si es necesario.
  • No hay dígitos en ninguna otra parte de la cadena, o si los hay después del número que desea extraer.
  • El número no se desbordará int .

Alternativamente, puede escanear directamente a la int :

[scanner scanUpToCharactersFromSet:numbers intoString:NULL]; int number; [scanner scanInt:&number];

Si el # marca el inicio del número en la cadena, puede encontrarlo mediante:

[scanner scanUpToString:@"#" intoString:NULL]; [scanner setScanLocation:[scanner scanLocation] + 1]; // Now scan for int as before.


Extensión Swift para obtener el número de la cadena

extension NSString { func getNumFromString() -> String? { var numberString: NSString? let thisScanner = NSScanner(string: self as String) let numbers = NSCharacterSet(charactersInString: "0123456789") thisScanner.scanUpToCharactersFromSet(numbers, intoString: nil) thisScanner.scanCharactersFromSet(numbers, intoString: &numberString) return numberString as? String; } }


Prueba esta respuesta de para obtener una buena pieza de código C que hará el truco:

for (int i=0; i<[str length]; i++) { if (isdigit([str characterAtIndex:i])) { [strippedString appendFormat:@"%c",[str characterAtIndex:i]]; } }


Puede usar la clase NSRegularExpression, disponible desde iOS SDK 4.

A continuación un código simple para extraer números enteros (patrón regex "/ d +" ):

- (NSArray*) getIntNumbersFromString: (NSString*) string { NSMutableArray* numberArray = [NSMutableArray new]; NSString* regexPattern = @"//d+"; NSRegularExpression* regex = [[NSRegularExpression alloc] initWithPattern:regexPattern options:0 error:nil]; NSArray* matches = [regex matchesInString:string options:0 range:NSMakeRange(0, string.length)]; for( NSTextCheckingResult* match in matches) { NSString* strNumber = [string substringWithRange:match.range]; [numberArray addObject:[NSNumber numberWithInt:strNumber.intValue]]; } return numberArray; }


Solución autónoma:

+ (NSString *)extractNumberFromText:(NSString *)text { NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet]; return [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""]; }

Maneja los siguientes casos:

  • @ "1234" → @ "1234"
  • @ "001234" → @ "001234"
  • @ "texto inicial eliminado 001234" → @ "001234"
  • @ "001234 el texto final se elimina" → @ "001234"
  • @ "a0b0c1d2e3f4" → @ "001234"

¡Espero que esto ayude!