扫描 Objective 中的数字 - C
Scan for numbers in Objective - C
我想知道我怎么能找到下面所有的数字。
输入
NSString* input = @ "1m3s"
期望的输出
@[@"1" @"3"]
我试过以下方法
NSArray *arr = [input componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"ms"]];
它返回我
@[@"1",@"3",@"@"]
有没有更好的方法来解决这个问题,有什么建议吗?
尽管这个问题已被标记为重复,但我已经测试了以下 answer 但没有奏效。
更新
可以是任何字符串值。
如果输入为 @"11m32s"
或 @11m32
,则所需输出为 @[@"11", @"32"];
如果输入为 @"11x32"
或 @11x32y
,则所需输出为 @[@"11", @"32"];
我认为下面的代码对我有用。
NSString *originalString = @"1m3s";
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int i=0; i<[originalString length]; i++) {
if (isdigit([originalString characterAtIndex:i])) {
NSMutableString *strippedString = [NSMutableString stringWithCapacity:10];
[strippedString appendFormat:@"%c",[originalString characterAtIndex:i]];
[arr addObject:strippedString];
}
}
NSLog(@"%@",arr.description);
使用下面的代码:
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSArray *outArray = [[input componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
使用这个方便的方法:
+ (NSArray *)extractNumberFromText:(NSString *)text
{
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSMutableArray *numberArray = [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet]mutableCopy];
[numberArray removeObject:@""];
return numberArray;
}
尝试:
NSString* input = @ "1m3s";
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSArray *outArray = [input componentsSeparatedByCharactersInSet:nonDigitCharacterSet];
outArray = [outArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
这是获取您想要的输出的代码:
NSString* input = @"1m3s";
NSString *newString = [[input componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < [newString length]; i++) {
NSString *ch = [newString substringWithRange:NSMakeRange(i, 1)];
[array addObject:ch];
}
NSLog(@"%@",array.description);
您也可以使用下面的代码。
NSString * String = @"24fsd35rf";
NSArray* Array = [String componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSLog(@"%@",[Array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]]);
要提取数字,您可以使用正则表达式。
NSString* input = @ "1m3s";
NSString *pattern = @"\d+"; // searches for one or more digits
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSArray *matches = [regex matchesInString:input options:0 range:NSMakeRange(0, input.length)];
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSTextCheckingResult *match in matches) {
[result addObject: [input substringWithRange:match.range]];
}
NSLog(@"%@", result);
或者,如果您想更具体地提取表达式 ##m##s
中的数字,请使用
NSString* input = @ "1m3s";
NSString *pattern = @"(\d+)m(\d+)s";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:input options:0 range:NSMakeRange(0, input.length)];
if (match) {
NSArray *result = @[[input substringWithRange:[match rangeAtIndex:1]], [input substringWithRange:[match rangeAtIndex:2]]];
NSLog(@"%@", result);
}
使用 NSScanner 也可以扫描浮点数。此外,您的数组直接使用 NSNumber 而不是 NSString 填充。
NSString * input = @ "12m32s";
NSScanner * aScanner = [NSScanner scannerWithString:input];
NSInteger aInt;
NSMutableArray * result = [NSMutableArray array];
while (!aScanner.isAtEnd)
{
if ([aScanner scanInteger:&aInt])
{
[result addObject:@(aInt)];
}
if (!aScanner.isAtEnd)
{
aScanner.scanLocation += 1;
}
}
NSLog(@"%@",result);
我想知道我怎么能找到下面所有的数字。
输入
NSString* input = @ "1m3s"
期望的输出
@[@"1" @"3"]
我试过以下方法
NSArray *arr = [input componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"ms"]];
它返回我
@[@"1",@"3",@"@"]
有没有更好的方法来解决这个问题,有什么建议吗?
尽管这个问题已被标记为重复,但我已经测试了以下 answer 但没有奏效。
更新
可以是任何字符串值。
如果输入为 @"11m32s"
或 @11m32
,则所需输出为 @[@"11", @"32"];
如果输入为 @"11x32"
或 @11x32y
,则所需输出为 @[@"11", @"32"];
我认为下面的代码对我有用。
NSString *originalString = @"1m3s";
NSMutableArray *arr = [[NSMutableArray alloc] init];
for (int i=0; i<[originalString length]; i++) {
if (isdigit([originalString characterAtIndex:i])) {
NSMutableString *strippedString = [NSMutableString stringWithCapacity:10];
[strippedString appendFormat:@"%c",[originalString characterAtIndex:i]];
[arr addObject:strippedString];
}
}
NSLog(@"%@",arr.description);
使用下面的代码:
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSArray *outArray = [[input componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
使用这个方便的方法:
+ (NSArray *)extractNumberFromText:(NSString *)text
{
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSMutableArray *numberArray = [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet]mutableCopy];
[numberArray removeObject:@""];
return numberArray;
}
尝试:
NSString* input = @ "1m3s";
NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
NSArray *outArray = [input componentsSeparatedByCharactersInSet:nonDigitCharacterSet];
outArray = [outArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
这是获取您想要的输出的代码:
NSString* input = @"1m3s";
NSString *newString = [[input componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]
componentsJoinedByString:@""];
NSMutableArray *array = [NSMutableArray array];
for (int i = 0; i < [newString length]; i++) {
NSString *ch = [newString substringWithRange:NSMakeRange(i, 1)];
[array addObject:ch];
}
NSLog(@"%@",array.description);
您也可以使用下面的代码。
NSString * String = @"24fsd35rf";
NSArray* Array = [String componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSLog(@"%@",[Array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]]);
要提取数字,您可以使用正则表达式。
NSString* input = @ "1m3s";
NSString *pattern = @"\d+"; // searches for one or more digits
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSArray *matches = [regex matchesInString:input options:0 range:NSMakeRange(0, input.length)];
NSMutableArray *result = [[NSMutableArray alloc] init];
for (NSTextCheckingResult *match in matches) {
[result addObject: [input substringWithRange:match.range]];
}
NSLog(@"%@", result);
或者,如果您想更具体地提取表达式 ##m##s
中的数字,请使用
NSString* input = @ "1m3s";
NSString *pattern = @"(\d+)m(\d+)s";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:nil];
NSTextCheckingResult *match = [regex firstMatchInString:input options:0 range:NSMakeRange(0, input.length)];
if (match) {
NSArray *result = @[[input substringWithRange:[match rangeAtIndex:1]], [input substringWithRange:[match rangeAtIndex:2]]];
NSLog(@"%@", result);
}
使用 NSScanner 也可以扫描浮点数。此外,您的数组直接使用 NSNumber 而不是 NSString 填充。
NSString * input = @ "12m32s";
NSScanner * aScanner = [NSScanner scannerWithString:input];
NSInteger aInt;
NSMutableArray * result = [NSMutableArray array];
while (!aScanner.isAtEnd)
{
if ([aScanner scanInteger:&aInt])
{
[result addObject:@(aInt)];
}
if (!aScanner.isAtEnd)
{
aScanner.scanLocation += 1;
}
}
NSLog(@"%@",result);