如何从字符串中提取数值?

时间:2010-05-21 10:28:45

标签: ios objective-c nsstring phone-number

是否可以从字符串中提取数字。例如,我有一个字符串:

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”之间的值。

5 个答案:

答案 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])];