Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 有没有办法计算NSString的行数?_Objective C_Cocoa - Fatal编程技术网

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

Objective c 有没有办法计算NSString的行数?,objective-c,cocoa,Objective C,Cocoa,可能重复: 有没有办法计算NSString的行数 NSString * myString = @"line 1 \n line 2 \n"; 直线=3 谢谢请尝试以下代码 NSString * myString = @"line 1 \n line 2 \n"; NSArray *list = [myString componentsSeparatedByString:@"\n"]; NSLog(@"No of lines : %d",[list count]); 请尝试以下代码 NSSt

可能重复:

有没有办法计算NSString的行数

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


谢谢

请尝试以下代码

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

请尝试以下代码

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

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

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

小心
由字符串分隔的组件
不够智能,无法检测mac/windows/unix行结束之间的连接。在
\n
上分离将适用于windows/unix行结尾,但不适用于经典的mac文件(有些流行的mac编辑器默认情况下仍然使用这些文件)。您确实应该检查
\r\n
\r

如果是加法,
组件通过字符串分离:
速度慢且内存不足。如果您关心性能,则应重复搜索换行符并计算结果数:

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);
NSString*myString=@“第1行\n第2行\n”;
int lineCount=1;
NSU整数字符位置=0;
NSCharacterSet*newlineCharacterSet=[NSCharacterSet newlineCharacterSet];
while(characterLocation=字符位置&&
[myString characterAtIndex:characterLocation]=='\r'&&
[myString characterAtIndex:characterLocation+1]=='\n'){
characterLocation++;
}
lineCount++;
characterLocation++;
}
NSLog(@“%i”,行数);

小心
由字符串分隔的组件
不够智能,无法在mac/windows/unix行结束之间进行检测。在
\n
上分离将适用于windows/unix行结尾,但不适用于经典的mac文件(有些流行的mac编辑器默认情况下仍然使用这些文件)。您确实应该检查
\r\n
\r

如果是加法,
组件通过字符串分离:
速度慢且内存不足。如果您关心性能,则应重复搜索换行符并计算结果数:

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);
NSString*myString=@“第1行\n第2行\n”;
int lineCount=1;
NSU整数字符位置=0;
NSCharacterSet*newlineCharacterSet=[NSCharacterSet newlineCharacterSet];
while(characterLocation=字符位置&&
[myString characterAtIndex:characterLocation]=='\r'&&
[myString characterAtIndex:characterLocation+1]=='\n'){
characterLocation++;
}
lineCount++;
characterLocation++;
}
NSLog(@“%i”,行数);

后一种解决方案也将正确处理CRLF序列,而
Components SeparatedByCharactersInSet:
将为每个这样的序列返回一个空的组件。谢谢@PeterHosey,我认为与您所说的完全相反的是正确的,但我做了一些测试,您是对的。我的代码在windows新行中被破坏。我已编辑了我的答案以删除单行示例,并更新了长/快示例以检查
\r\n
。后一种解决方案也将正确处理CRLF序列,然而,
componentsSeparatedByCharactersInSet:
将为每个这样的序列返回一个空组件。谢谢@PeterHosey,我认为与你所说的完全相反的是真的,但我做了一些测试,你是对的。我的代码在windows新行中被破坏。我已编辑了我的答案以删除单行示例,并更新了长/快示例以检查
\r\n
。您应该参考文本布局编程指南@Patrick请在SO上发布问题之前搜索SO和google。你们应该参考文本布局编程指南@Patrick请先搜索SO和google,然后再在SO上发布问题。