1

我有这个字符串返回:

“周一至周五上午 8:00 - 晚上 7:30”

我需要消除周一至周五的东西才能得到这个:

“上午 8:00 - 晚上 7:30”

然后我需要将它分成开放时间和关闭时间,以确定它是否开放:

“上午 8 点 00 分” && “下午 7 点 30 分”

但是有很多商店,他们有不同的开放和关闭时间,所以我不能从 8 中提取 6 个字符或类似的东西。

到目前为止,我决定走这条路:

NSRange startRange = [storeTime.text rangeOfString:@"-"];

NSString *openString = [storeTime.text substringWithRange:NSMakeRange(16, startRange.location-17)];

NSString *closeString = [storeTime.text substringWithRange:NSMakeRange(startRange.location+2, storeTime.text.length-(startRange.location+2))];

但似乎我可能会因为从 16 岁开始的硬编码而中断,这让我想知道它是否会在其他任何地方中断。关于如何实现这一目标的任何更好的想法?

4

3 回答 3

8

您可以使用NSRegularExpression从字符串中获取两个时间字符串:

NSError *error = NULL;
NSRegularExpression *regex = [NSRegularExpression
     regularExpressionWithPattern:@"\\d{1,2}:\\d{2} (AM|PM)"
                          options:NSRegularExpressionCaseInsensitive
                            error:&error];
NSString *str = @"Monday thru Friday 8:00 AM - 7:30 PM";
NSArray *m = [regex matchesInString:str
                            options:0
                              range:NSMakeRange(0, str.length)];
于 2013-07-24T17:21:47.587 回答
5

如果您知道时间间隔之前的文本始终是 format <someday> thru <someday>,那么您可以找到第一个数字字符(digit)的索引,并从该索引中获取一个子字符串。

@" - "然后,使用该componentsSeparatedByString:方法拆分时间字符串。

例子:

NSString *s = @"monday thru sunday, 0:00 - 23:59";

NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
int idx = [s rangeOfChatacterFromSet:digits].location;
NSString *timeStr = [s substringFromIndex:idx];

NSArray *timeStrings = [timeStr componentsSeparatedByString:@" - "];
于 2013-07-24T17:19:14.227 回答
0

首先通过替换某些字符串的出现如何。

所以使用[string stringByReplacingOccurrencesOfString:@"Monday" withString: @""];

删除所有的日子,可能还有“直通”字符串。

然后你就剩下几个小时了。不要忘记注意空格字符。

希望这可以帮助。

于 2013-07-24T17:17:43.783 回答