1

我已经使用 ICU 中断迭代器进行了裁剪。在示例中,他们建议使用以下代码遍历所有边界:

void listWordBoundaries(const UnicodeString& s) {
    UErrorCode status = U_ZERO_ERROR;
    BreakIterator* bi = BreakIterator::createWordInstance(Locale::getUS(), status);


    bi->setText(s);
    int32_t p = bi->first();
    while (p != BreakIterator::DONE) {
        printf("Boundary at position %d\n", p);
        p = bi->next();
    }
    delete bi;
}

这似乎表明next()实际上改变了迭代器。但是,文档似乎表明它的唯一作用是返回一个值。这只是不良文档的一个例子吗?特别是,如果next()确实发生了变异,我想知道是否last()也在发生变异。

4

1 回答 1

0

请注意,这current()是 const 而next()不是last()。是next()的,推进迭代器并将last()其设置到结束位置。我已经提交了http://bugs.icu-project.org/trac/ticket/9360来修复文档,谢谢。

于 2012-06-01T15:21:21.253 回答