Часть приложения, над которым я работаю, включает в себя средство просмотра файлов журнала с функцией поиска текста, которая вызывает сопоставление с шаблоном на JTextField#getText()
, например:
Matcher m = somePattern.matcher(textField.getText());
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());
, где textField является JTextField, а
startPosn устанавливается в текущую позицию каретки текстового поля
Однако начальная и конечная позиции, возвращаемые этим возвратом неверные начальная и конечная позиции каретки, только в Windows .
Начальная и конечная позиции на X больше, чем должны быть, где X = количество раз, когда новая строка встречается в textField до startPosn.
Поскольку в Linux этого нет, я думаю, что это может быть связано с различием в способе обработки новых строк (\r\n
и \n
).
Я что-то не так делаю; и как мне работать с этим?
Impl. Решение:
Изменено с использованием примера в TFA, связанном с помощью camickr.
Matcher m = somePattern.matcher(textField.getDocument().getText(0, textField.getDocument().getLength()));
m.find(startPosn);
System.out.println("startPosn: " + m.start());
System.out.println("endPosn: " + m.end());
Примечание: изменилась только первая строка.
Это позволило мне получить правильный вывод как в Linux, так и в Windows.