【问题标题】:Is there a way to count the number of lines of a NSString ? [duplicate]有没有办法计算 NSString 的行数? [复制]
【发布时间】:2011-11-21 10:30:11
【问题描述】:

可能重复:
How to count the number of lines in an Objective-C string (NSString)?

有没有办法计算 NSString 的行数?

NSString * myString = @"line 1 \n line 2 \n";

行 = 3;

谢谢

【问题讨论】:

  • 你应该参考文本布局编程指南。 Counting Lines of Text
  • @Patrick 请在 SO 和 google 上搜索,然后再在 SO 上发布问题。

标签: objective-c cocoa


【解决方案1】:

注意componentsSeparatedByString 不够聪明,无法在 mac/windows/unix 行尾之间进行检测。在 \n 上分隔将适用于 windows/unix 行尾,但不适用于经典的 mac 文件(并且有一些流行的 mac 编辑器默认仍使用这些文件)。你真的应该检查\r\n\r

是加法,componentsSeparatedByString: 很慢而且很耗内存。如果您关心性能,则应反复搜索换行符并计算结果数:

NSString * myString = @"line 1 \n line 2 \n";

int lineCount = 1;
NSUInteger characterLocation = 0;
NSCharacterSet *newlineCharacterSet = [NSCharacterSet newlineCharacterSet];
while (characterLocation < myString.length) {
  characterLocation = [myString rangeOfCharacterFromSet:newlineCharacterSet options:NSLiteralSearch range:NSMakeRange(characterLocation, (myString.length - characterLocation))].location;

  if (characterLocation == NSNotFound) {
    break;
  }

  // if we are at a \r character and the next character is a \n, skip the next character
  if (myString.length >= characterLocation &&
      [myString characterAtIndex:characterLocation] == '\r' &&
      [myString characterAtIndex:characterLocation + 1] == '\n') {
    characterLocation++;
  }

  lineCount++;
  characterLocation++;
}

NSLog(@"%i", lineCount);

【讨论】:

  • 后一种解决方案也将正确处理 CRLF 序列,而 componentsSeparatedByCharactersInSet: 将为每个此类序列返回一个空组件。
  • 谢谢@PeterHosey 我认为与你所说的完全相反的是真的,但我做了一些测试,你是对的。我的代码在 Windows 换行符上被破坏了。我已经编辑了我的答案以删除单行示例,并更新了长/快速示例以检查 \r\n
【解决方案2】:

试试下面的代码。

NSString * myString = @"line 1 \n line 2 \n";
NSArray *list = [myString componentsSeparatedByString:@"\n"];
NSLog(@"No of lines : %d",[list count]);

【讨论】:

    【解决方案3】:

    试试这个

    NSString * myString = @"line 1 \n line 2 \n";
    int count = [[myString componentsSeparatedByString:@"\n"] count];
    NSLog(@"%d", count);
    

    【讨论】:

      猜你喜欢
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多