从字符串变量获取更多char

时间:2014-04-29 11:18:15

标签: ios objective-c cocoa-touch nsstring

我有NSString *fileName

这将包含1到3位数的变量号。我想提取所有数字

我可以使用

获得第一个数字
    //create text for appliance identifier
    char obsNumber = [fileName characterAtIndex:3];//get 4 character
    NSLog(@"Obs number %c",obsNumber);

    //Text label
    [cell.titleLabel setText:[NSString stringWithFormat:@"Item No: %c",obsNumber]];
    NSLog(@"Label for observation = %@",cell.titleLabel.text);

但是如果字符串包含例如78或204的数字,我想要捕获所有两个或三个数字。

我试过这个

 //create text for appliance identifier
    char obsNumber1 = [fileName characterAtIndex:3];//get 4 character
    char obsNumber2 = [fileName characterAtIndex:4];//get 5 character
    char obsNumber3 = [fileName characterAtIndex:5];//get 6 character

    NSLog(@"Obs number %c,%c,%c",obsNumber1,obsNumber2,obsNumber3);


    //Text label
    [cell.titleLabel setText:[NSString stringWithFormat:@"Item No: %c,%c,%c",obsNumber1,obsNumber2,obsNumber3]];
    NSLog(@"Label for observation = %@",cell.titleLabel.text);

这给了我18c 1ce等

4 个答案:

答案 0 :(得分:1)

这对你有用吗?

NSString *filename = @"obs127observation"; //An example variable with your format

这段代码可能比较整洁,但你应该明白这个想法:

NSString *filenameNumber = [[filename
                             stringByReplacingOccurrencesOfString:@"observation"
                             withString:@""]
                            stringByReplacingOccurrencesOfString:@"obs"
                            withString:@""];

答案 1 :(得分:1)

你可以修剪除小数之外的其他字母。

NSString *onlyNumbers=[yourstring stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];

答案 2 :(得分:0)

正如你的评论所说,它有预定义的一组值,对吧。然后试试这个

NSstring *str = [filename substringFromIndex:11];
// Convert the str to char[]

然后你应该试试NSScanner

NSString *numberString;

    NSScanner *scanner = [NSScanner scannerWithString:filename];
    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];

// you can play around with the set of number 

答案 3 :(得分:0)

你一次分离一个角色然后将它们组合成一个字符串的方法是一种尴尬,过于复杂的解决方法。如果您在字符串中间有一个数字,Kumar建议使用NSScanner是一个不错的选择。

但是,你听起来像你的字符串将始终包含一个数字而只包含一个数字。真的吗?或者你需要忽略哪些角色?

在选择最佳解决方案之前,您需要清楚完整地定义问题。

可能就像使用NSString方法substringWithRange一样简单。