如何从字符串中提取数值?
Posted
技术标签:
【中文标题】如何从字符串中提取数值?【英文标题】: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
【参考方案1】:
我认为你需要的是 NSScanner,它可以让你取出部分字符串。
例如
int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];
【讨论】:
这是最好的方法,因为使用-[NSString intValue]
可能会被语言环境抛弃。【参考方案2】:
您可以为此使用正则表达式:您要匹配\d+
,即非零数字序列。
相关问题
Best regex library for iphone sdk app?否则,您可以手动遍历字符串中的字符并找到任何连续的数字序列。
【讨论】:
但要注意用户名中有数字的用户...最好先查找“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])];
【讨论】:
以上是关于如何从字符串中提取数值?的主要内容,如果未能解决你的问题,请参考以下文章