3

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

my name is shishir and my number is 98890876478

我可以98890876478从上面的字符串中提取吗?

或者,如果我的字符串是:

my name is shishir and my number is XXX98890876478XXX

在这种情况下,我可以提取在 XXX 之间的“98890876478”。

是否有可能做到这一点?

我从服务器收到一条消息,该消息应采用上述格式,我需要数值以进行进一步操作

编辑:

这是我尝试使用的代码:

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

4

5 回答 5

7

我认为您需要的是 NSScanner,它可以让您取出部分字符串。

例如

int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];
于 2010-05-21T10:35:05.487 回答
1

您可以为此使用正则表达式:您想要匹配\d+,即非零数字序列。

相关问题


否则,您可以手动遍历字符串中的字符并找到任何连续的数字序列。

于 2010-05-21T10:30:28.713 回答
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"

希望这可以帮助!

于 2014-12-04T23:19:20.593 回答
0

这就是我最终完成的

NSString *newString = [[theXML componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
----------------------------------------

NSString *newStr = [newString substringWithRange:NSMakeRange(1, [newString length]-1)];
----------------------------------------

我已经完成了。

于 2010-05-24T13:30:16.577 回答
0

stringByTrimmingCharactersInSet 只是删除字符串末尾或开头的字符。

例如:“abc 10 cd”-> 10(它会工作)

例如:“abc 10 a 1”->“10 a 1”(不起作用)

使用正则表达式似乎是一个更好的主意。

iphone sdk - 从字符串中删除除数字 0-9 之外的所有字符

编辑:

不检查接受的答案,而是检查超过 50 票的答案

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];
于 2014-02-07T05:27:19.900 回答