我有一个包含单词和数字的字符串.如何从字符串中提取该数字?

NSString *str = @"This is my string. #1234";

我想能够剥离1234作为一个整数.字符串将有不同的数字和单词,每次我搜索它.

思想?

推荐答案

以下是一个基于NSScanner的解决方案:

// Input
NSString *originalString = @"This is my string. #1234";

// Intermediate
NSString *numberString;

NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *numbers = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];

// Throw away characters before the first number.
[scanner scanUpToCharactersFromSet:numbers intoString:NULL];

// Collect numbers.
[scanner scanCharactersFromSet:numbers intoString:&numberString];

// Result.
int number = [numberString integerValue];

这里所做的(许多)假设中的一些:

  • 数字位数为0-9、无符号、无小数点、无千位分隔符等.如果需要,可以在NSCharacterSet中添加符号字符.
  • 字符串中的其他地方没有数字,如果有,则为after,即您要提取的数字.
  • 这个数字不会超过int.

或者,您可以直接扫描到int:

[scanner scanUpToCharactersFromSet:numbers intoString:NULL];
int number;
[scanner scanInt:&number];

如果#标记字符串中数字的开头,可以通过以下方式找到:

[scanner scanUpToString:@"#" intoString:NULL];
[scanner setScanLocation:[scanner scanLocation] + 1];
// Now scan for int as before.

Objective-c相关问答推荐

Objective-C struct 的默认值以及如何测试

如何通过仅更改高度而不更改宽度来调整 UILabel 的大小?

使用 AVAudioplayer 在后台播放音乐

Objective-C 中的正式协议和非正式协议有什么区别?

UIRefreshControl iOS 6 xcode

判断是否显示 UIAlertView

在 Objective-C 中在 iPhone 上使用 HTTP POST 和 GET 的教程

NSFileManager 唯一的文件名

右对齐的 UITextField 空格键在 iOS 7 中不前进光标

使用情节提要的条件转场

对块进行类型定义是如何工作的

在 NSNumbers 的 NSArray 中查找最小值和最大值

Lipo错误!!无法打开输入文件

NSSet 到 NSArray 转换调用 objectAtIndex?

IOHIDFamily 的神秘控制台错误

iOS是静态框架还是动态框架?

IOS 中的圆形进度条

笔尖中的原型单元而不是故事板

@synthesized 保留属性的释放是如何处理的?

iOS 上的电话号码格式