【问题标题】:How to Extract a Numerical Value from a String?如何从字符串中提取数值?
【发布时间】:2010-05-21 10:28:45
【问题描述】:

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

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

【问题讨论】:

  • @shishir Ander 使用NSScanner 的解决方案不起作用吗?
  • 它没有给出正确的输出,我发布了我的控制台的输出,你可以查看它。问候shishir

标签: ios objective-c nsstring phone-number


【解决方案1】:

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

例如

int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];

【讨论】:

  • 这是最好的方法,因为使用 -[NSString intValue] 可能会被语言环境抛弃。
【解决方案2】:

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

相关问题


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

【讨论】:

  • 但要注意用户名中有数字的用户...最好先查找“my number is”字符串,然后从那里开始扫描。
【解决方案3】:

独立解决方案:

+ (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"

希望这会有所帮助!

【讨论】:

    【解决方案4】:

    这就是我最终完成的事情

    NSString *newString = [[theXML componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
    ----------------------------------------
    
    NSString *newStr = [newString substringWithRange:NSMakeRange(1, [newString length]-1)];
    ----------------------------------------
    

    我已经完成了。

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 1970-01-01
        • 2012-02-12
        相关资源
        最近更新 更多