0

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

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

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

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

根据 CFStringTokenizer 参考,它标记为“单词、句子和段落”。我需要比这更多的粒度。

感谢帮助。

4

2 回答 2

0

您可以只使用and的componentsSeparatedByString:方法在子字符串之间插入分隔符:NSStringNSMutableArray

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);
于 2013-05-26T22:46:37.087 回答
0

这是 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

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

于 2013-05-27T20:09:16.830 回答