【问题标题】:How to get index of word or syllable in NSString如何在 NSString 中获取单词或音节的索引
【发布时间】:2013-10-02 11:35:58
【问题描述】:

我需要获取 NSString 的单词或音节的位置(索引)。我很抱歉我不能发布任何代码,因为我不知道从哪里开始。我正在使用网络服务,服务将在句子中回复我单词或音节,并告诉我任何颜色,我必须在句子中更改单词的颜色。我想出了如何改变字符的颜色,但我需要知道它的索引。我将非常感谢任何线索或帮助。 提前致谢。

【问题讨论】:

  • 您是否费心查看 NSString 的规范?

标签: ios objective-c


【解决方案1】:

要获取字符串中的单词,可以调用:

    NSString *string = @"How to get index";
    NSArray *words = [string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    NSLog(@"%lu",[words indexOfObject: @"get"]); // outputs 2 (starts at 0)

以音节分隔取决于语言,而且很难做到。

【讨论】:

    【解决方案2】:

    用索引枚举单词:

    NSString *s = @"How to get index of word or syllable in NSString";
    __block NSUInteger i = 0;
    [s enumerateSubstringsInRange:NSMakeRange(0, [s length])
                          options:NSStringEnumerationByWords
                       usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
                           NSLog(@"%lu %@", i++, substring);
                       }];
    

    这将打印出来

    0 How
    1 to
    2 get
    

    等等

    等效的方法是:

    NSUInteger words = 0;
    NSScanner *scanner = [NSScanner scannerWithString: s];
    NSString *capture;
    NSCharacterSet *whiteSpace = [NSCharacterSet whitespaceAndNewlineCharacterSet];
    while ([scanner scanUpToCharactersFromSet:whiteSpace intoString:&capture]){
        NSLog(@"%lu %@", words++, capture);
    }
    

    但依赖空格、制表符和换行符作为分隔符。第一种方法更好。

    【讨论】:

    • 谢谢,这工作完美,但这不是我真正想要的,例如我需要在“如何获取 NSString 中的单词或音节的索引”中获取“索引”单词的开始和结束索引“这可能吗?
    • NSRange range = [string rangeOfString:@"index" options:NSCaseInsensitiveSearch]; NSLog(@"start = %lu, end = %lu",range.location, range.location + [@"index" length]);
    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多