【问题标题】:How to substring long nsstrings and present them in uitextview?如何对长 nsstring 进行子串化并将它们呈现在 uitextview 中?
【发布时间】:2013-06-08 20:41:56
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • 您能否提供有关您如何从大文件中创建字符串的 sn-p 信息?

标签: ios nsstring uitextview text-files large-files


【解决方案1】:

将所有数据存储在 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-05
    • 2021-11-09
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多