ios - 如何在不对位置进行硬编码的情况下从NSString中正确提取子字符串?

标签 ios objective-c nsstring substring

我有这个字符串返回:

“星期一至星期五8:00 AM-7:30 PM”

为了得到这个,我需要消除mon-fri的内容:

“8:00 AM-7:30 PM”

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

“8:00 AM”和&“7:30 PM”

但是商店很多,开闭时间也不同,所以我不能只从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的硬编码开始而中断,这让我怀疑它是否可以在其他任何地方中断。关于如何实现这一点的任何更好的想法?

最佳答案

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

然后,使用@" - "方法在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:@" - "];

关于ios - 如何在不对位置进行硬编码的情况下从NSString中正确提取子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17840685/

相关文章:

ios - 如果我将使用Swift 3再次运行该应用程序,则该图像在文档目录中不存在

ios - 使用 stringByReplacingOccurrencesOfString 来考虑 "words"

iPhone 注册时钟更新

objective-c - 预处理器宏和 BOOL 怪异

objective-c - 使用类将 NSString 传递到另一个 ViewController

c++ - const 类型 'NSString *const __strong' 对象的默认初始化?

ios - 访问 iOS 7 隐藏的 UITableViewCellScrollView?

ios - 在 SwiftUI 中删除列表下方的额外行分隔符

ios - 将一种印地语语言数字转换为阿拉伯语语言数字

ios - 将标题设置为按钮左侧对齐