2011-07-29 10 views
8

He creado un tokenizer cadena como esta:¿Cómo obtener una matriz de oraciones usando CFStringTokenizer?

stringTokenizer = CFStringTokenizerCreate(
         NULL 
         , (CFStringRef)str 
         , CFRangeMake(0, [str length]) 
         , kCFStringTokenizerUnitSentence 
         , userLocale); 

Pero, ¿cómo puedo obtener esas frases ahora de la tokenizer? La Guía de programación de String CF no menciona CFStringTokenizer o tokens (realizó una búsqueda de texto completo en el PDF).

Respuesta

16

Aquí es un ejemplo de CFStringTokenizer uso:

CFStringRef string; // Get string from somewhere 
CFLocaleRef locale = CFLocaleCopyCurrent(); 

CFStringTokenizerRef tokenizer = 
    CFStringTokenizerCreate(
     kCFAllocatorDefault 
     , string 
     , CFRangeMake(0, CFStringGetLength(string)) 
     , kCFStringTokenizerUnitSentence 
     , locale); 

CFStringTokenizerTokenType tokenType = kCFStringTokenizerTokenNone; 
unsigned tokensFound = 0; 

while(kCFStringTokenizerTokenNone != 
    (tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer))) { 
    CFRange tokenRange = CFStringTokenizerGetCurrentTokenRange(tokenizer); 
    CFStringRef tokenValue = 
     CFStringCreateWithSubstring(
      kCFAllocatorDefault 
      , string 
      , tokenRange); 

    // Do something with the token 
    CFShow(tokenValue); 
    CFRelease(tokenValue); 
    ++tokensFound; 
} 

// Clean up 
CFRelease(tokenizer); 
CFRelease(locale); 
+0

Muchas gracias! – openfrog

+5

+1. También es posible hacer lo mismo usando el nivel superior '[NSString enumerateSubstringsInRange: options: usingBlock:]' con la opción 'NSStringEnumerationBySentences', aunque la solución Foundation es un poco más poderosa. Por ejemplo, puede especificar cualquier configuración regional usando 'CFStringTokenizerCreate', mientras que' enumerateSubstringsInRange: options: usingBlock: 'usa la configuración regional actual del usuario. –

0

También puede utilizar:

[mutstri enumerateSubstringsInRange:NSMakeRange(0, [mutstri length]) 
           options:NSStringEnumerationBySentences 
          usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop){ 

           NSLog(@"%@", substring); 

          }]; 
Cuestiones relacionadas