2011-07-29 23 views
8

Utworzyliśmy tokenizera ciąg tak:Jak uzyskać tablicę zdań za pomocą CFStringTokenizer?

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

Ale w jaki sposób uzyskać te wyroki teraz z tokenizera? Przewodnik programowania programowania CF nie wspomina o CFStringTokenizer lub tokenach (przeszukiwano pełnotekstowo w pliku PDF).

Odpowiedz

16

Oto przykład CFStringTokenizer użycia:

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

Dziękuję bardzo! – openfrog

+5

+1. Można również zrobić to samo używając wyższego poziomu '[NSString enumerateSubstringsInRange: options: usingBlock:]' z opcją 'NSStringEnumerationBySentences', chociaż rozwiązanie Foundation jest trochę bardziej wydajne. Na przykład można określić dowolne ustawienia narodowe za pomocą 'CFStringTokenizerCreate', natomiast' wyliczyćSubstringsInRange: options: usingBlock: 'używa bieżącego ustawienia narodowego użytkownika. –

0

Można również użyć:

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

           NSLog(@"%@", substring); 

          }]; 
Powiązane problemy