我解析一个正常格式的字符串:
8:00 AM-9:00 PM
我使用以下代码将开盘时间与关闭时间分开,得到了2次数组:
NSCharacterSet *digits = [NSCharacterSet decimalDigitCharacterSet];
int idx = [s rangeOfCharacterFromSet:digits].location;
NSString *timeStr = [s substringFromIndex:idx];
NSArray *timeStringsArray2 = [timeStr componentsSeparatedByString:@" - "];
NSLog(@"timeStringsArray2 %@", timeStringsArray2);
问题是某些时间字符串的写法不正确,如下所示:
8:00 AM- 9:00 PM
这个简单的错误引发以下错误:
-[__NSArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'
因为它无法分隔时间字符串中的项目。我确定即使我让客户端修复了这些错误,他们也会在某些时候再次重新插入带有该错误的记录。如何解决这两种情况?
最佳答案
这正是正则表达式所针对的问题。
下面的代码将在您描述的情况下将字符串timeString
分为两个单独的时间firstTime
和secondTime
,无论编写正确与否。它可以处理一个以上的空格,没有空格或任何空白字符而不是空格,这使其比仅假设破折号两侧最多有一个空格的功能更加强大:
NSString *timeString = @"8:00AM - 9:00PM";
NSString *pattern = @"\\s*-\\s*";//Matches zero or more whitespace characters surrounding a dash character
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:pattern
options:0 error:NULL];
NSTextCheckingResult *match = [regex firstMatchInString:timeString
options:0
range:NSMakeRange(0, [timeString length])];
if (match) {
NSRange matchRange = [match range];
NSString* firstTime = [timeString substringToIndex:matchRange.location];
NSString* secondTime = [timeString substringFromIndex:matchRange.location + matchRange.length];
NSLog(@"First time: %@", firstTime);
NSLog(@"Second time: %@", secondTime);
}
关于ios - 如何在iOS中修复此字符串格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18168585/