2017-01-08 6 views
0

Я пытаюсь удалить все четные строки в JTextArea, но у меня проблемы с работой. My JTextArea называется «input», и я использую цикл for для итерации по линиям и затем удаления всех четных. Мой цикл:Удалить строки в JTextArea

for (int i=0; i<lineMax; i++) { 
    if (lineNum % 2 == 0) { 
     end = input.getLineEndOffset(0); 
     input.replaceRange("", 0, end); 
    } 
    lineNum++; 
} 

Если я ставлю «Это тест» в моем JTextArea с каждым словом на новой линии на выходе будет «тест» (с каждым словом в новой строке).

ответ

2
end = input.getLineEndOffset(0); 
input.replaceRange("", 0, end); 

Это всегда будет получить смещение первой линии, так что вы всегда будете извлекать текст из смещения 0, до конца первой строки.

Алгоритм будет более сложным, чем при попытке перемотки вперед в текстовой области, потому что каждый раз, когда вы удаляете строку, смещения следующих строк меняются, а относительные номера строк изменяются, поэтому вы не знаете, какая строка нечетно/даже больше.

Простым подходом было бы начать с последней строки в текстовой области. Таким образом, относительные номера строк предыдущих строк не будут меняться при удалении текста.

Вы можете использовать следующие методы JTextArea, чтобы помочь с логикой:

  1. getLineCount() - начать здесь и отсчитать назад к нулевой линии
  2. getLineEndOffset() и getLineStartOffset() - когда вы найдете даже линию вы получите два смещения и удалить текст.