【问题标题】:Parsing integers, including a range, from an NSString [closed]从 NSString 解析整数,包括范围
【发布时间】:2013-08-17 23:59:51
【问题描述】:

我需要从这样的字符串中获取符号 ("5, 15, 7-10") 和符号,直到第一个逗号需要写入第一个字符串,直到第二个字符串和分隔破折号的符号需要写入数组,并重新计算第一个到最后一个的值。

【问题讨论】:

标签: ios objective-c string cocoa-touch nsstring


【解决方案1】:

你需要使用componentSeparatedByString:

NSString *list = @"5, 15, 7-10";
NSArray *listItems = [list componentsSeparatedByString:@", "];

这将返回一个看起来像 @[@"5", @"15", @"7-10"]; 的数组

根据我对您问题的理解,这应该可行。不过,您可能想完善您的问题,因为它有点难以弄清楚。如果您这样做而我所做的事情不起作用,我很乐意修复解决方案。

编辑:以下代码可以满足您的需求(我认为):

NSString *list = @"5, 15, 7-10";
NSArray *listItems = [list componentsSeparatedByString:@", "];
NSMutableArray *expandedList = [[NSMutableArray alloc] init];

for(NSString *s in listItems){
    NSRange found = [s rangeOfString:@"-"];
    if (found.location == 1) {
        NSArray *hyphenString = [s componentsSeparatedByString:@"-"];
        NSInteger first = [[hyphenString objectAtIndex:0] intValue];
        NSInteger last = [[hyphenString objectAtIndex:1] intValue];
        [expandedList addObject:@(first)];
        NSInteger trueDiff = (last - first) - 1;
        int i = 0;
        while (i < trueDiff){
            first = first + 1;
            [expandedList addObject:@(first)];
            i++;
        }
        [expandedList addObject:@(last)];

    } else {
        [expandedList addObject:[NSNumber numberWithInt:[s intValue]]];
    }
}
NSLog(@"%@", expandedList);

这将输出:

2013-08-17 21:12:54.579 NumWork[693:303] (
    5,
    15,
    7,
    8,
    9,
    10
)

【讨论】:

  • 非常感谢。但我需要返回两个字符串,分别为 5 和 15 以及包含从 7 到 10 的值的数组。
  • 7-10 是否总是在字符串的末尾?
  • 不,它可能无处不在
  • 所以当你看到 7-10 时,你希望它打印 7、8、9、10?
  • NSScanner 可能是更好的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2020-12-06
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-26
相关资源
最近更新 更多