0

我正在将 2-5 mb 的大 txt 文件读入我想在 uitextview 中呈现的 nsstrings。

现在我已经体验到读取整个字符串需要很长时间,特别是因为我每次都删除换行符。

所以我决定将它们NSString分成单独的页面,我可以通过两个按钮(“上一个”和“下一个”)进行导航。我做的第一件事是决定将它NSString分成 500 个字符长的子字符串(然后我在呈现字符串之前删除换行符)。

现在这很好用并且足够快,但是有一个小问题让我很烦恼,子字符串中的最后一个单词经常在中间被截断。

所以我当时所做的不是使用 500 个字符来分隔子字符串,而是使用 20 个点/句点“。”。事实证明这也非常有效,直到我意识到并非所有可能加载的 txt 文件和文本都将包含点/句点,因为某些语言可能没有点。

所以我正在寻找一种解决方案,我可以将长文本文件分成较小的子字符串,大约一页长,我可以导航并且不会将子字符串中的最后一个单词切成两半。任何帮助,将不胜感激。

另外我应该补充一点,我尝试在 x 个单词(即 x 个空格)之后分隔,我认为这可能是最好的解决方案,但我想不出任何其他方式,但componentsSeparatedByString:@". "需要很长时间,因为它贯穿整个字符串。

是否有一些枚举字符串的好方法,但仍然允许浏览页面,也许通过保存子字符串范围位置或其他方式?

4

1 回答 1

0

将所有数据存储在 NSMutableArray 中,然后按字符串中的句子枚举并添加到可变数组中。

NSString * string = @"YOUR VERY LONG FILE";

NSMutableArray *array = [NSMutableArray arrayWithCapacity:100];
NSRange range = NSMakeRange(0, string.length);

[string enumerateSubstringsInRange:range options:NSStringEnumerationBySentences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
   NSLog(@"substring: %@", substring);
   NSLog(@"substringRange len:%lu, loc:%lu", substringRange.length, substringRange.location);
   NSLog(@"enclosingRange len:%lu loc:%lu",enclosingRange.length, enclosingRange.location);

   [array addObject:substring];
        }];

还可以查看其他 NSStringEnumeration 选项,例如 ByLines、ByParagraphs 或 ByWords。

于 2013-06-12T20:00:37.507 回答