How to Extract a Numerical Value from a String?
Is it possible to extract a number from a string. For example, I have a string:
my name is shishir and my number is 98890876478
Can I extract on 98890876478
from the above string?
Or if my string is:
my name is shishir and my number is XXX98890876478XXX
In this condition can I extract `98890876478", which is in between of XXX.
Is it possible to do this?
I am getting a message from a server which should be in the format as above, and I need the numeric value for further operations
Edit:
Here's the code I'm trying to use:
NSString *lo开发者_运维知识库gString = [NSString stringWithFormat:@"%@",theXML];
NSString *digits = [logString stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSLog(@"Message id: %i", [digits intValue]);
which outputs:
2010-05-21 16:37:07.092 sms[5311:207] OK: message-ID XXX110103468XXX
2010-05-21 16:37:07.851 sms[5311:207] Message id: 2
I think its returning two because size==2. I need to retrieve the value between the "XXX".
I think what you need is NSScanner, this allows you to take out parts of the string.
e.g.
int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];
You can use regex for this: you want to match \d+
, that is, a non-zero sequence of digits.
Related questions
- Best regex library for iphone sdk app?
Otherwise, you can just manually go through the characters in the string and find any contiguous sequence of digits.
Self contained solution:
+ (NSString *)extractNumberFromText:(NSString *)text
{
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
return [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
}
Handles the following cases:
@"1234"
→@"1234"
@"001234"
→@"001234"
@"leading text get removed 001234"
→@"001234"
@"001234 trailing text gets removed"
→@"001234"
@"a0b0c1d2e3f4"
→@"001234"
Hope this helps!
THIS IS WHAT I FINALLY DONE WITH
NSString *newString = [[theXML componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
----------------------------------------
NSString *newStr = [newString substringWithRange:NSMakeRange(1, [newString length]-1)];
----------------------------------------
And I am done.
stringByTrimmingCharactersInSet just remove character at the end or beginning of a string.
ex.: "abc 10 cd" -> 10 (it will work)
ex.: "abc 10 a 1" -> "10 a 1" (it will not work)
Using regex seem a better idea.
iphone sdk - Remove all characters except for numbers 0-9 from a string
EDIT:
Check not the accepted answer but the one with more than 50 votes
NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];
精彩评论