Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.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
Iphone 如何将字符串拆分成句子_Iphone_Objective C_Cocoa_String_Nsstring - Fatal编程技术网

Iphone 如何将字符串拆分成句子

Iphone 如何将字符串拆分成句子,iphone,objective-c,cocoa,string,nsstring,Iphone,Objective C,Cocoa,String,Nsstring,我有一个包含许多句子的NSString,我想把它分成一个NSArray句子。以前有人解决过这个问题吗?我找到了EnumerateSubstringsRange:options:usingBlock:,它可以做到这一点,但看起来它在iPhone上不可用(仅限雪豹)。我曾考虑过根据句点拆分字符串,但这似乎不是很可靠 到目前为止,我最好的选择似乎是使用RegexKitLite将其正则化为一系列句子。解决方案?使用。您需要使用kCFStringTokenizerUnitSentence选项创建标记器。我

我有一个包含许多句子的
NSString
,我想把它分成一个
NSArray
句子。以前有人解决过这个问题吗?我找到了
EnumerateSubstringsRange:options:usingBlock:
,它可以做到这一点,但看起来它在iPhone上不可用(仅限雪豹)。我曾考虑过根据句点拆分字符串,但这似乎不是很可靠


到目前为止,我最好的选择似乎是使用RegexKitLite将其正则化为一系列句子。解决方案?

使用。您需要使用
kCFStringTokenizerUnitSentence
选项创建标记器。

我已经有一段时间没有使用它们了,但我认为您可以使用NSString、NSCharacterSet和NSScanner来实现这一点。您创建一个包含结尾句子标点的字符集,然后调用
-[NSScanner scanuptocharacters fromset:intoString:][/code>。每次扫描都会将一个句子抽取成一个字符串,您会一直调用该方法,直到扫描程序用完字符串


当然,文本必须有很好的标点符号

我会用扫描仪扫描

NSScanner *sherLock = [NSCanner scannerWithString:yourString]; // autoreleased
NSMutableArray *theArray = [NSMutableArray array]; // autoreleased
while( ![sherLock isAtEnd] ){
   NSString *sentence = @"";
   // . + a space, your sentences probably will have that, and you
   // could try scanning for a newline \n but iam not sure your sentences
   // are seperated by it
   [sherLock scanUpToString:@". " inToString:&sentence];
   [theArray addObject:sentence];
}
这应该可以做到,可能会有一些小错误,但这就是我要做的。 不过,您应该在文档中查找NSScanner。。您可能会遇到这样一种方法: 对于这种情况更好。

那么:

NSArray *sentences = [string componentsSeparatedByString:@". "];

这将从字符串“One.Two.Three”返回一个数组(“One”、“Two”、“Three”)。

NSArray*语句=[astring Components SeparatedByCharactersInSet:[NSCharacterSet标点符号集CharacterSet]]

定义“句子”。一旦你能做到这一点,解决办法就简单明了了。是的,我希望其他人已经对一个句子给出了一个合理有力的定义。我希望站在巨人的肩膀上!如果你看TeX,它猜测句号标记句子的结尾,除非它们紧跟在大写字母之后-如果这不对,你必须手动指定它是句号还是缩写。可能是“我的朋友马克博士从圣裘德学院获得博士学位”的重复,在我发布问题后,我尝试了这种方法。它比只扫描“.”效果更好,但也不多。