ios - 如何在iOS中修复此字符串格式?

标签 ios parsing nsstring

我解析一个正常格式的字符串:

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分为两个单独的时间firstTimesecondTime,无论编写正确与否。它可以处理一个以上的空格,没有空格或任何空白字符而不是空格,这使其比仅假设破折号两侧最多有一个空格的功能更加强大:

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/

相关文章:

python - For 循环遍历 Python 中文本文件的重复部分

encoding - 将带变音符号的 NSString 转换为 const char *

ios - ARKit3 如何使用TrueDepth相机进行面部跟踪和其他人的面部网格?

ios - 如何自定义注册远程推送通知时的弹出消息

iphone - iOS 和解压 xib 文件

android - 解析 XML 的最佳实践

c# - Unity 2018.1.3f1 UI 闪烁问题

javascript - JavaScript 有类似 simple_html_dom.php 的东西吗?

iphone - stringWithString 内存泄漏

ios - 永远不会调用 NSString 与 UITextField 文本的比较