Obj C等效于Java StringTokenizer返回分隔符



我试图解析一个大字符串,以隔离单词和所有标点符号。Java的StringTokenizer类有以下构造函数:

public StringTokenizer(String str, String delim, boolean returnDelims)

注意最后一个参数。如果为真,则每个分隔符也作为标记返回。

是否有一个类在Obj-C,模仿这个Java功能?我已经能够解析字符串,但是在这个过程中我丢失了分隔符,这些分隔符决定了我接下来要做什么。

根据CFStringTokenizer引用,它将标记为"单词、句子和段落"。我需要更多的粒度

感谢您的帮助

您可以使用NSStringcomponentsSeparatedByString:方法,然后使用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

这不是一个完整的实现,它不处理空格或强制数组中的特定顺序。但它应该给你一个想法。

相关内容

  • 没有找到相关文章

最新更新