2013-06-30 2 views
1

У меня возникают проблемы со строкой, представленной в виде массива символов. То, что я хотел бы сделать, как я бы в Java, заключается в следующем:Работа со строкой в ​​виде массива символов

 while (i < chars.length) { 
     char ch = chars[i]; 
     if ((WORD_CHARS.indexOf(ch) >= 0) == punctuation) { 

      String token = buffer.toString(); 
      if (token.length() > 0) { 
       parts.add(token); 
      } 
      buffer = new StringBuffer(); 

     } 
     buffer.append(ch); 
     i++; 
    } 

Что я делаю что-то вроде этого:

while(i < strlen(chars)) { 

    char ch = chars[i]; 
    if(([WORD_CHARS rangeOfString:ch] >= 0) == punctuation) { 

     NSString *token = buffer.toString(); 
     if([token length] > 0) { 
      [parts addObject:token]; 
     } 
     buffer = [NSMutableString string]; 
    } 
    [buffer append(ch)]; 
    i++; 
} 

Я не знаю, как я Предполагается преобразовать

String token = buffer.toString(); 

0 Объект c, где buffer - NSMutableString. Кроме того, как проверить это, если условие в объективе c?

if ((WORD_CHARS.indexOf(ch) >= 0) == punctuation) 

WORD_CHARS - это NSString. У меня также возникают проблемы с добавлением ch в буфер.

Любая помощь очень ценится.

+1

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html –

+3

Даже если ваш Java-код можно перевести почти дословно на Objective-C , для достижения результата могут быть лучшие и более простые методы. Поэтому это поможет, если вы покажете пример ввода и ожидаемый результат. –

+0

И этот вопрос не имеет ничего общего с Java, пожалуйста, удалите тег. – ignis

ответ

6

Иногда перевод строки за строкой не самый лучший способ.

Я бы сделал что-то более похожее на этот (непроверенный) код, если chars - NSString;

NSCharacterSet *punctuation = 
    [NSCharacterSet characterSetWithCharactersInString:@"<your separators>"]; 
NSArray *parts = [chars componentsSeparatedByCharactersInSet:punctuation]; 

Это должно оставить parts NSArray из NSStrings, содержащих исходный раскол NSString по пунктуации.

1

Из вашего примера видно, что вы пытаетесь исключить пунктуации и создать список слов из заданной строки. Ну, Foundation вы освещали, если это ваше намерение. Если это не ваше намерение, не стесняйтесь минус один.

Скажите, что ваша исходная строка хранится в переменной с именем string. Вот один из способов перечислить все слова в строке, которая автоматически пропускает пунктуации.

NSRange fullRange = NSMakeRange(0, string.length); 
[string enumerateSubstringsInRange:fullRange 
          options:NSStringEnumerationByWords 
         usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) { 
    // this block will be invoked for each word in the string 
    // and the word is stored in substring. 
}]; 

Учитывая это предложение:

Как правило, имена нескольких слов будут возвращены в виде нескольких лексем, следуя стандартную лексическую практику Tagger. Если этот параметр установлен, то имена нескольких слов будут объединены вместе и возвращены как один токен.

лексем что я получил, (обратите внимание на отсутствие пунктуации):

 
Typically 
multiple 
word 
names 
will 
be 
returned 
as 
multiple 
tokens 
following 
the 
standard 
tokenization 
practice 
of 
the 
tagger 
If 
this 
option 
is 
set 
then 
multiple 
word 
names 
will 
be 
joined 
together 
and 
returned 
as 
a 
single 
token 

Если у вас есть более сложные требования, вы можете посмотреть на перечисление с помощью enumerateLinguisticTagsInRange:scheme:options:orthography:usingBlock:.

Смежные вопросы