Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Objective-C: Find numbers in string

I have a string that contains words as well as a number. How can I extract that number from the string?

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

I would like to be able to strip out 1234 as an int. The string will have different numbers and words each time I search it.

Ideas?

like image 224
Nic Hubbard Avatar asked Jan 11 '11 22:01

Nic Hubbard


1 Answers

Here's an NSScanner based solution:

// 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]; 

(Some of the many) assumptions made here:

  • Number digits are 0-9, no sign, no decimal point, no thousand separators, etc. You could add sign characters to the NSCharacterSet if needed.
  • There are no digits elsewhere in the string, or if there are they are after the number you want to extract.
  • The number won't overflow int.

Alternatively you could scan direct to the int:

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

If the # marks the start of the number in the string, you could find it by means of:

[scanner scanUpToString:@"#" intoString:NULL]; [scanner setScanLocation:[scanner scanLocation] + 1]; // Now scan for int as before. 
like image 199
martin clayton Avatar answered Oct 05 '22 16:10

martin clayton