从iOS中的字符串中提取子字符串?

时间:2013-08-01 10:36:03

标签: ios objective-c nsstring substring

有没有办法从下面的字符串中提取子字符串

我的真实字符串是“NS09A”或“AB455A”,但是我只想要“NS09”或“AB455”(直到原始字符串数字部分的末尾)。

我如何提取这个?

我看到google搜索答案,比如使用起始位置和endinf子字符串的一部分,我们可以提取它,但这里有“Alphabets + number + alphabets”的任意组合。我只需要“”字母+数字“

5 个答案:

答案 0 :(得分:4)

也许不是每个人都会同意,但我喜欢正则表达式。他们允许指定 正是你在寻找的东西:

NSString *string = @"AB455A";

// One or more "word characters", followed by one or more "digits":
NSString *pattern = @"\\w+\\d+";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
                                       options:0
                                     error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:string
                        options:NSMatchingAnchored
                          range:NSMakeRange(0, [string length])];
if (match != nil) {
    NSString *extracted = [string substringWithRange:[match range]];
    NSLog(@"%@", extracted);
    // Output: AB455
} else {
    // Input string is not of the expected form.
}

答案 1 :(得分:3)

试试这个: -

NSString *str=@"ASRF12353FYTEW";
NSString *resultStr;
for(int i=0;i<[str length];i++){
    NSString *character = [str substringFromIndex: [str length] - i];
    if([character intValue]){
        resultStr=[str substringToIndex:[str length]-i+1];
        break;
    }
}
NSLog(@"RESUKT STRING %@",resultStr);

答案 2 :(得分:2)

我测试了这段代码:

   NSString *originalString = @"NS09A";

    // Intermediate
    NSString *numberString;
    NSString *numberString1;


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


    [scanner scanUpToCharactersFromSet:numbers intoString:&numberString];

    [scanner scanCharactersFromSet:numbers intoString:&numberString1];

    NSString *result=[NSString stringWithFormat:@"%@%@",numberString,numberString1];

    NSLog(@"Finally ==%@",result);

希望它能帮到你

<强>输出

Finally ==NS09

<强>更新

NSString *originalString = @"kirtimali@gmail.com";

NSString *result;
NSScanner *scanner = [NSScanner scannerWithString:originalString];
NSCharacterSet *cs1 = [NSCharacterSet characterSetWithCharactersInString:@"@"];

[scanner scanUpToCharactersFromSet:cs1 intoString:&result];

NSLog(@"Finally ==%@",result);

output:
Finally ==kirtimali

答案 3 :(得分:1)

使用NSScannerscanUpToCharactersFromSet:intoString:方法指定应该使用哪些字符来停止解析。如果您已经有一种方法可以找到要提取的每个部分的开头,那么这可以在一个带有某些逻辑的循环中,也可以与setScanLocation:一起应用。


使用scanUpToCharactersFromSet:intoString:时,您正在寻找下一个无效字符。它不需要是一个“特殊”字符(在unicode意义上),只是一组已知的字符对您想要的内容无效。所以,你可以使用:

[[NSCharacterSet characterSetWithCharactersInString:@"1234567890"] invertedSet]

答案 4 :(得分:-3)

您可以在- (NSString *)substringWithRange:(NSRange)aRange类上使用NSString方法来提取子字符串。使用NSMakeRange创建NSRange对象。