Ios 扫描目标-C中的数字
我不知道怎样才能找到下面所有的数字 输入Ios 扫描目标-C中的数字,ios,objective-c,nsstring,Ios,Objective C,Nsstring,我不知道怎样才能找到下面所有的数字 输入 NSString* input = @ "1m3s" 期望输出 @[@"1" @"3"] 我尝试了以下方法 NSArray *arr = [input componentsSeparatedByCharactersInSet: [NSCharacterSet characterSetWithCharactersInString:@"ms"]]; 它回报了我 @[@"1",@"3",@"@"] 有没有
NSString* input = @ "1m3s"
期望输出
@[@"1" @"3"]
我尝试了以下方法
NSArray *arr = [input componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"ms"]];
它回报了我
@[@"1",@"3",@"@"]
有没有更好的方法来解决这个问题,有什么建议吗
尽管这个问题被标记为重复,但我已经测试了以下内容,但不起作用
更新
可以是任何字符串值
如果输入为@“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);
NSString*originalString=@“1m3s”;
NSMutableArray*arr=[[NSMutableArray alloc]init];
对于(int i=0;i使用以下代码:
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";
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*input=@“1m3s”;
NSString*newString=[[input Components由字符分隔的集合:
[[NSCharacterSet decimalDigitCharacterSet]InversedSet]]
组件通过字符串连接:@“];
NSMutableArray*数组=[NSMutableArray];
对于(int i=0;i<[newString length];i++){
NSString*ch=[newString substringWithRange:NSMakeRange(i,1)];
[数组addObject:ch];
}
NSLog(@“%@”,array.description);
您也可以使用下面的代码
NSString * String = @"24fsd35rf";
NSArray* Array = [String componentsSeparatedByCharactersInSet:
[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];
NSLog(@"%@",[Array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self <> ''"]]);
NSString*String=@“24fsd35rf”;
NSArray*数组=[字符串组件由字符分隔集:
[[NSCharacterSet decimalDigitCharacterSet]InversedSet]];
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方法Components以字符分隔的集合
,并将其输出传递给您已经完成的操作。我已经尝试过了,请查看我的更新问题。您想将数字作为NSArray
?不,是的,我想将数字作为NSArray
。11m32s的输出是什么此字符串?使用%c
仅适用于ASCII(8位)字符。但是characterAtIndex
返回16位字符。至少使用%c
。输出不是NSArray
,它也返回我@[@“1”,“3”,“@”]
没有。如果最后一个字符是非数字字符,那么您将得到一个空字符串。从数组中删除空字符串将只得到数字。如果输入[11m32s]
则失败。所需的输出[11,32]
。我对您的努力进行了优化。谢谢!但是当我输入[11m32s]
,我得到了结果数组:(11,32)使用相同的代码我还测试了11m32s
和11m32
,当我记录结果数组时得到了(11,32),如果输入是@“11x32”
或@11x32y
正如我在问题中提到的,它可以是任何字符?第一个版本涵盖了这两个字符。它考虑字符串中出现的任何一个或多个数字。使用正则表达式完全是矫枉过正和缓慢的。只需使用NSScanner。这是一个更好的解决方案。
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);