问题描述
Nsstring *testing = @"Feb 5 2021 05:00 PM,Feb 6 2021 07:00 PM";
也就是说,我希望我的代码能够抓取“2021 年 2 月 5 日”之后的 8 个字符,并将它们放入另一个字符串中(下午 05:00)。知道我怎么能做到这一点吗?我很难过,因为我只希望它抓住那个时间,而不是它之后的其他角色。
这些日期也总是不同的,所以我不想简单地计算“2021 年 2 月 5 日”中的字符数(否则,如果该计数改变了一个字符,代码将不起作用,哈哈)。
解决方法
解决这个问题的方法很多。但是,如果字符串输入的格式可靠并且性能或内存使用不是问题:
NSString *testing = @"Feb 5 2021 05:00 PM,Feb 6 2021 07:00 PM";
NSArray *tokens=[testing componentsSeparatedByString:@" "];
NSString *time=[NSString stringWithFormat:@"%@ %@",tokens[3],tokens[4]];
NSLog(@"time: %@",time);
如果您需要所有时间,并且日期/时间值的数量是可变的:
NSString *testing = @"Feb 5 2021 05:00 PM,Feb 6 2021 07:00 PM";
NSArray *datums=[testing componentsSeparatedByString:@","];
for(NSString *datum in datums)
{
NSArray *tokens=[datum componentsSeparatedByString:@" "];
NSString *time=[NSString stringWithFormat:@"%@ %@",tokens[4]];
NSLog(@"time: %@",time);
}
请注意,如果字符串可能为空或包含无效数据,您将需要额外的错误检查。
,您的输入似乎是一个固定格式的日期时间值列表,即一个月中的字符数或数字可能会改变,但整体模式保持不变。
如果是这种情况并且您只想在文本级别进行操作,即您不希望解析字符串以生成 NSDate
值,则可以使用 NSRegularExpression
。使用分组构建日期时间格式的模式以捕获您希望提取的日期时间部分,然后使用 NSRegularExpression
的方法处理字符串中的所有匹配项。
如果您在使代码正常工作时遇到问题,请提出一个新问题,显示您的生成内容并描述问题 - 毫无疑问,有人会帮助您。
HTH