我试图解析一个大字符串,以隔离单词和所有标点符号。Java的StringTokenizer类有以下构造函数:
public StringTokenizer(String str, String delim, boolean returnDelims)
注意最后一个参数。如果为真,则每个分隔符也作为标记返回。
是否有一个类在Obj-C,模仿这个Java功能?我已经能够解析字符串,但是在这个过程中我丢失了分隔符,这些分隔符决定了我接下来要做什么。
根据CFStringTokenizer引用,它将标记为"单词、句子和段落"。我需要更多的粒度
感谢您的帮助
您可以使用NSString
的componentsSeparatedByString:
方法,然后使用NSMutableArray
来在子字符串之间插入分隔符:
NSString *s = @"abc,def,ghi,jkl";
NSString *delim = @",";
NSArray *arr = [s componentsSeparatedByString:delim];
NSMutableArray *res = [NSMutableArray array];
[res addObject:arr[0]];
for (NSInteger i = 1; i < arr.count; i++) {
[res addObject:delim];
[res addObject:arr[i]];
}
NSLog(@"%@", res);
这里是NSScanner上的一个示例类别,可能会让你入门:
@implementation NSScanner (Tokenizer)
+ (NSArray *)tokenize(NSString *str,NSString *delim,BOOL returnDelims)
{
NSScanner *scanner=[NSScanner scannerWithString:str];
NSString *delimiters=[NSCharacterSet characterSetWithCharactersInString:@",.!;"];
NSMutableArray *ma=[NSMutableArray array];
NSString *s;
while(![scanner isAtEnd])
{
if([scanner scanUpToCharactersFromSet:delim intoString:&s])
{
[ma addObject:s];
}
if([scanner scanCharactersFromSet:delim intoString:&s])
{
if(returnDelims) [ma addObject:s];
}
}
return ma;
}
@end
这不是一个完整的实现,它不处理空格或强制数组中的特定顺序。但它应该给你一个想法。