Java OpenOffice xSentenceCursor卡在段落末尾
我正在使用此例程迭代OpenOffice文档中的句子:Java OpenOffice xSentenceCursor卡在段落末尾,java,openoffice.org,Java,Openoffice.org,我正在使用此例程迭代OpenOffice文档中的句子: while (moreParagraphsOO) { while (moreSentencesOO) { xSentenceCursor.gotoEndOfSentence(true); textSentence = xSentenceCursor.getString(); xTextViewCursor.gotoRange(xSentenceC
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内容和“句子”
端接头
滥用您的知识。。。我这里有一个非常相似的问题,似乎没有人能够回答。。。