我有一个文本文件,其中包含可通过“添加”区分的信息 block 。每个有意义的字符串主体都由 ########
分隔(后来我使用 Core Data 将它们保存到磁盘)。
我将它们保存到 NSString 文件的临时 NSArray 中,如下所示:
NSURL *url = [self urlOfResource:@"List" withExrension:@"txt"];
NSError *error = error;
NSString *originalContent = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
if (error) NSLog(@"ERROR READING CONTENT OF FILE: %@", error);
// separeting string and saving it to NSArray
NSArray *seperateStringBody = [originalContent componentsSeparatedByString:@"########"];
现在使用 for 循环,我根据添加日期(属于同一文本文件中的每个离散文本正文)分离相关内容
for(NSString *body in seperateStringBody){
//I am showing only relevant code here
NSRange range = [removedNewLine rangeOfString:@"Added on "];
NSUInteger startRange = range.location+range.length;
NSString *dateString = [removedNewLine substringWithRange:NSMakeRange(startRange, removedNewLine.length-startRange)];
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"EEEE, MMMM d, y hh:mm:ss a"];
NSDate *addedDate = [formatter dateFromString:dateString];
}
问题是文本文件包含超过 6 种语言。即:
English: Added on Friday, 25 December 2015 20:12:36
Russian: Добавлено: суббота, 26 декабря 2015 г. в 0:16:45
German: Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51
Japanese: 作成日: 2015年12月26日土曜日 11:32:45
Portuguese: Adicionado: sábado, 26 de dezembro de 2015 11:39:53
如您所见,使用 NSRange
提取日期字符串的硬编码方式并不是很有用。我只能考虑在大小写等于文件内语言数量的情况下使用“switch”语句。
有什么方便的方法吗?
编辑:1
当我使用 NSDateDetector 解析 NSDate 时。以下是结果:
Japanese: Original String: 作成日: 2015年12月26日土曜日 11:32:45 After Parsing: Values: {46, 8}{2015-12-26 18:02:45 +0000} 2015-12-26 18:19:44.538 WordsWorth[872:32957] stringDateFromDetector: 11:32:45
Russian: Original String: Добавлено: суббота, 26 декабря 2015 г. в 0:16:37 After Parsing: Values: {96, 7}{2015-12-25 18:46:37 +0000} 2015-12-26 18:19:44.054 WordsWorth[872:32957] stringDateFromDetector: 0:16:37
German: Original String:Hinzugefügt am Samstag, 26. Dezember 2015 11:02:51 After Parsing:{65, 38}{2015-12-26 05:32:51 +0000} 2015-12-26 18:19:44.218 WordsWorth[872:32957] stringDateFromDetector: am Samstag, 26. Dezember 2015 11:02:51
最佳答案
使用 NSDataDetector
:
let string = "English: Added on Friday, 25 December 2015 20:12:36 ---- 作成日: 2015年12月26日土曜日 11:32:45"
let types: NSTextCheckingType = [.Date]
let detector = try? NSDataDetector(types: types.rawValue)
detector?.enumerateMatchesInString(string, options: [], range: NSMakeRange(0, (string as NSString).length)) { (result, flags, _) in
print(result!.date!)
}
上面的代码打印并匹配
2015-12-25 19:12:36 +0000
2015-12-26 10:32:45 +0000
这正是您想要和需要的。
尽管如此,请注意打印语句 - 过度强制展开
下面是一个截图,展示了不同日期的解析:
关于ios - 如何从单个文本文件中提取不同语言的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34469826/