Java 删除jtext区域中的行

Java 删除jtext区域中的行,java,swing,jtextfield,Java,Swing,Jtextfield,我正试图删除JTextArea中的所有偶数行,但我很难让它正常工作。 我的JTextArea称为input,我使用for循环遍历这些行,然后删除所有偶数行。 我的for循环: for (int i=0; i<lineMax; i++) { if (lineNum % 2 == 0) { end = input.getLineEndOffset(0); input.replaceRange("", 0, end); } lineNum+

我正试图删除JTextArea中的所有偶数行,但我很难让它正常工作。 我的JTextArea称为input,我使用for循环遍历这些行,然后删除所有偶数行。 我的for循环:

for (int i=0; i<lineMax; i++) {
    if (lineNum % 2 == 0) {
        end = input.getLineEndOffset(0);
        input.replaceRange("", 0, end);
    }
    lineNum++;
}
如果我把这是一个测试放在我的JTextArea中,每个单词都在新行上,那么输出将是一个测试,每个单词都在新行上

end = input.getLineEndOffset(0);
input.replaceRange("", 0, end);
这将始终获得第一行的偏移量,因此您将始终删除从偏移量0到第一行末尾的文本

算法将比在文本区域中尝试向前循环时更加复杂,因为每次删除一行时,下面几行的偏移量都会发生变化,相对行号也会发生变化,因此您不再知道哪一行是奇数/偶数

更简单的方法是从文本区域的最后一行开始。这样,删除文本时,前几行的相对行号不会改变

您可以使用JTextArea的以下方法来帮助处理逻辑:

getLineCount-从这里开始,然后计数回第零行 getLineEndOffset和getLineStartOffset-当您找到一条偶数线时,将获得两个偏移并删除文本。 这将始终获得第一行的偏移量,因此您将始终删除从偏移量0到第一行末尾的文本

算法将比在文本区域中尝试向前循环时更加复杂,因为每次删除一行时,下面几行的偏移量都会发生变化,相对行号也会发生变化,因此您不再知道哪一行是奇数/偶数

更简单的方法是从文本区域的最后一行开始。这样,删除文本时,前几行的相对行号不会改变

您可以使用JTextArea的以下方法来帮助处理逻辑:

getLineCount-从这里开始,然后计数回第零行 getLineEndOffset和getLineStartOffset-当您找到一条偶数线时,将获得两个偏移并删除文本。