使用字符串作为字符数组

时间:2013-06-30 11:09:14

标签: objective-c

我遇到了一个字符串表示字符串的问题。正如我在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();

到objective c,其中buffer是NSMutableString。另外,如果目标c中的条件如何检查?

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

WORD_CHARS是一个NSString。我也无法将ch附加到缓冲区。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

有时逐行翻译不是最佳方式。

如果charsNSString,我会做一些与此(未经测试)代码更相似的内容;

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

这应该留下parts NSArray的NSArray,其中包含通过标点符号拆分的原始NSString。

答案 1 :(得分: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:查看枚举。