【问题标题】:Obj-C - Get first X number of characters after a string inside NSString?Obj-C - 在NSString中的字符串之后获取前X个字符?
【发布时间】:2021-05-10 08:17:38
【问题描述】:

我有一个这样的字符串:

NSString *testing = @"Feb 5 2021 05:00 PM, Feb 6 2021 07:00 PM"; 

也就是说,我希望我的代码能够抓取“2021 年 2 月 5 日”之后的 8 个字符并将它们放入另一个字符串(05:00 PM)。知道我怎么能做到这一点吗?我被难住了,因为我只希望它抓住那个时间,而不是它之后的其他角色。

这些日期也总是不同的,所以我不想简单地计算“2021 年 2 月 5 日”中的字符数(否则,如果该计数更改单个字符,代码将无法正常工作,哈哈)。

【问题讨论】:

  • “所以我不想简单地计算字符数”我不明白。请澄清问题开始时的已知。您实际上是否提前知道您想要在确切的子字符串“Feb 5 2021”之后的空格之后正好开始 8 个字符?还是您想要第四个和第五个“单词”的问题,无论它们在哪里?还是什么?
  • 我会使用componentsSeparatedByString(带有","分隔符)来获取不同的日期。我会将2个字符串转换为NSDate对象(如果格式相同,则使用NSDateFormatter , 或者NSDataDetector) 并向用户展示需要什么。

标签: objective-c nsstring


【解决方案1】:

解决这个问题的方法很多。但是,如果字符串输入的格式是可靠的并且性能或内存使用不是问题:

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[3],tokens[4]];
    
    NSLog(@"time: %@",time);
}

请注意,如果字符串可能为空或包含无效数据,您将需要额外的错误检查。

【讨论】:

  • 啊,我最终根据这个答案弄清楚了我需要什么,非常感谢。这确实是正确的 :) 你摇滚。
【解决方案2】:

您的输入似乎是一个固定格式的日期时间值列表,即一个月或数字中的字符数可能会改变,但整体模式保持不变。

如果是这种情况,并且您只希望在文本级别进行操作,即您不希望解析字符串以生成 NSDate 值,则可以使用 NSRegularExpression。使用分组构造日期时间格式的模式以捕获您希望提取的日期时间部分,然后使用NSRegularExpression 的方法处理字符串中的所有匹配项。

如果您的代码无法正常工作,请提出一个新问题,说明您生成了什么并描述问题 - 毫无疑问有人会帮助您。

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 2017-11-15
    • 2021-05-17
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多