2013-05-26 31 views
0

我想解析一個大字符串以隔離單詞和所有標點符號。 Java的StringTokenizer類具有以下構造函數。對象C相當於Java StringTokenizer返回分隔符

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

注意最後一個參數。如果這是真的,則每個分隔符也作爲標記返回。

Obj-C中是否有類模仿此Java功能?我已經能夠解析字符串,但是我在這個過程中失去了我的分隔符,並且這些分隔符決定了我接下來要做什麼。

根據CFStringTokenizer參考,它標記爲「單詞,句子和段落」。我需要更多的粒度。

欣賞幫助。

+0

NSScanner可能是一個很好的候選人。 –

回答

0

你可以只使用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); 
+0

這將適用於一個分隔符,但我有九個,我打破了。如果我正確讀取您的代碼,我無法知道哪個分隔符導致了中斷。我可能不得不推出自己的。寫一個可重用的幫手類的好機會。 –

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 

這不是一個完整的實現,它不處理空白或在數組中執行特定順序。但它應該給你一個想法。