2013-06-30 62 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(); 

到目標c,其中緩衝區是一個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

有時候逐行翻譯並不是最好的方法。

如果charsNSString,我會做更類似於此(未測試)代碼的內容;

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

這應該離開parts包含標點符號你原來的NSString分裂NSString的的一個NSArray。

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. 
}]; 

鑑於這樣一句話:

通常情況下,多字的名字將返回爲多個令牌,繼惡搞的標準符號化的做法。如果設置了此選項,則多個單詞名稱將連接在一起並作爲單個標記返回。

令牌居然是(注意沒有標點符號):

 
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:

相關問題