Java OpenOffice xSentenceCursor卡在段落末尾

Java OpenOffice xSentenceCursor卡在段落末尾,java,openoffice.org,Java,Openoffice.org,我正在使用此例程迭代OpenOffice文档中的句子: while (moreParagraphsOO) { while (moreSentencesOO) { xSentenceCursor.gotoEndOfSentence(true); textSentence = xSentenceCursor.getString(); xTextViewCursor.gotoRange(xSentenceC

我正在使用此例程迭代OpenOffice文档中的句子:

    while (moreParagraphsOO) {
        while (moreSentencesOO) {
            xSentenceCursor.gotoEndOfSentence(true);
            textSentence = xSentenceCursor.getString();
            xTextViewCursor.gotoRange(xSentenceCursor.getStart(), false);
            xTextViewCursor.gotoRange(xSentenceCursor.getEnd(), true);
            if (!textSentence.equals("")) {
                return textSentence;
            }
            moreSentencesOO = xSentenceCursor.gotoNextSentence(false);

        }

        moreParagraphsOO = xParagraphCursor.gotoNextParagraph(false);
        moreSentencesOO = xSentenceCursor.gotoStartOfSentence(false);
    }
除非它找到一个以“.”结尾的段落,这是一个句点,后面有一个或几个空格,否则它可以正常工作。在这种情况下,它进入无限循环执行

 while (moreSentencesOO)
    ...
    moreSentencesOO = xSentenceCursor.gotoNextSentence(false);
没完没了。我对OpenOfficeAPI不是很精通,我被困在这里了。有什么想法吗

谢谢


编辑:我带来了一个有点尴尬的补丁,其中包括检查光标的当前位置,如果它在两次迭代之间没有前进,请跳到下一段:

    while (moreParagraphsOO) {
        while (moreSentencesOO) {

            /**********************************/
            int previousPosX = xTextViewCursor.getPosition().X;
            int previousPosY = xTextViewCursor.getPosition().Y;
            /*********************************/

            xSentenceCursor.gotoEndOfSentence(true);
            textSentence = xSentenceCursor.getString();
            xTextViewCursor.gotoRange(xSentenceCursor.getStart(), false);
            xTextViewCursor.gotoRange(xSentenceCursor.getEnd(), true);
            if (!textSentence.equals("")) {
                return textSentence;
            }            

            moreSentencesOO = xSentenceCursor.gotoNextSentence(false);

            /**********************************/
            if (previousPosX == xTextViewCursor.getPosition().X &&
                previousPosY == xTextViewCursor.getPosition().Y){
                    xParagraphCursor.gotoNextParagraph(false);
            }
            /**********************************/
        }
        moreParagraphsOO = xParagraphCursor.gotoNextParagraph(false);
        moreSentencesOO = xSentenceCursor.gotoStartOfSentence(false);
    }
这似乎有效,但我不确定它是否会带来未来的问题。我更喜欢“优雅”的解决方案。

根据,只有移动光标时才会返回true,因此这是一个bug。考虑一下,

问题似乎发生在何时,但不是何时。因此,测试它,而不是
getPosition()

这是Andrew Pitonyak的基本宏,我对其进行了修改以包含此修复

子语句
oCursor=ThisComponent.Text.createTextCursor()
oCursor.gotoStart(假)
做
N内容=N内容+1
如果oCursor.isEndOfSentence()而不是oCursor.isStartOfSentence(),则
戈赖特(1,错)
如果结束
在oCursor.GotonExtSession时循环(False)
MsgBox N内容和“句子”
端接头

滥用您的知识。。。我这里有一个非常相似的问题,似乎没有人能够回答。。。