是否可以从字符串中提取数字。例如,我有一个字符串:
my name is shishir and my number is 98890876478
我可以从上面的字符串中提取98890876478
吗?
或者我的字符串是:
my name is shishir and my number is XXX98890876478XXX
在这种情况下,我可以提取“98890876478”,它位于XXX之间。
是否可以这样做?
我从服务器收到一条消息,该消息应采用上述格式,我需要数值才能进一步操作
这是我正在尝试使用的代码:
NSString *logString = [NSString stringWithFormat:@"%@",theXML];
NSString *digits = [logString stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSLog(@"Message id: %i", [digits intValue]);
输出:
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
我认为它返回两个因为size == 2。我需要检索“XXX”之间的值。
答案 0 :(得分:7)
我认为您需要的是NSScanner,这允许您取出部分字符串。
e.g。
int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];
答案 1 :(得分:1)
您可以使用正则表达式:您希望匹配\d+
,即非零数字序列。
否则,您可以手动浏览字符串中的字符并查找任何连续的数字序列。
答案 2 :(得分:1)
自包含解决方案:
+ (NSString *)extractNumberFromText:(NSString *)text
{
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
return [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
}
处理以下案件:
@"1234"
→@"1234"
@"001234"
→@"001234"
@"leading text get removed 001234"
→@"001234"
@"001234 trailing text gets removed"
→@"001234"
@"a0b0c1d2e3f4"
→@"001234"
希望这有帮助!
答案 3 :(得分:0)
这是我最后完成的事情
NSString *newString = [[theXML componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
----------------------------------------
NSString *newStr = [newString substringWithRange:NSMakeRange(1, [newString length]-1)];
----------------------------------------
我完成了。
答案 4 :(得分:0)
stringByTrimmingCharactersInSet只删除字符串末尾或字符串开头的字符。
例如:“abc 10 cd” - > 10(它会起作用)
例如:“abc 10 a 1” - > “10 a 1”(它不起作用)
使用正则表达式似乎是一个更好的主意。
iphone sdk - Remove all characters except for numbers 0-9 from a string
编辑:
检查未接受的答案,但选票超过50票
NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];