Вопрос

Часть приложения, над которым я работаю, включает в себя средство просмотра файлов журналов с функцией поиска текста, которая вызывает средство сопоставления шаблонов. 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 устанавливается на текущую позицию курсора текстового поля.

Однако начальная и конечная позиции, возвращаемые этим возвратом неправильный начальная и конечная позиции каретки, только в винде.
И начальная, и конечная позиции на X больше, чем должны быть, где X = количество раз, когда новая строка встречается в textField до startPosn.

Поскольку в Linux этого нет, я думаю, это может быть связано с разницей в способе добавления новых строк (\r\n и \n) обрабатываются.

Я делаю что-то неправильно;и как мне это обойти?

Осуществлениерешение:

Изменено с использованием примера в 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.

Это было полезно?

Решение

Я думаю, что это может быть связано с разницей в том, как обрабатываются новые строки ( r n и n).

Да, это проблема в Windows.

Но я сомневаюсь, что у вас возникнут проблемы с JTextField, поскольку они не содержат строк новых строк.

Я предлагаю вам прочитать Текст и новые строки который объяснит, как справиться с этим для JTextArea и JTextPane.

Если вам нужна дополнительная помощь, опубликуйте SSCCE это показывает проблему.

Другие советы

Вы можете использовать что-то вроде этого:

String text = textField.getText();
text.replaceAll(System.getProperty("line.separator"), "\n");

Тогда занимайся своими делами.В приведенном выше коде вы можете заменить « » на то, что вам нужно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top