AWT TextArea, кажется, считает последовательность cr-lf одним символом - PullRequest
0 голосов
/ 24 октября 2008

У меня есть эта проблема:

Текст "ABCD \ r \ nEFGHJ", загруженный из файла, сопоставляется с регулярным выражением Java "EFGH". Объект Matcher, конечно, говорит, что начало совпадающей строки находится в позиции 6. Matcher считает \ r \ n двумя позициями.

Я помещаю исходный текст в компонент AWT TextArea и затем вызываю select (6,10), чтобы выделить область, которая была сопоставлена. Угадайте, что ... он начинает выделяться с буквы 'F'. На одну позицию вперед, чем следовало бы ...

Если более чем 1 пара crlf предшествует согласованной области, то выделение перемещается еще больше вперед, чем следовало бы.

У кого-нибудь есть простое решение?

Ответы [ 3 ]

1 голос
/ 24 октября 2008

Простое решение: удалить все \ r из текста ...: -P

Не так глупо, как кажется, если у вас нет непоследовательного конца строк (это может произойти) и вы хотите оставить их без изменений ... И это, вероятно, в любом случае делает компонент.

0 голосов
/ 24 октября 2008

Если \ r \ n непротиворечивы, вы можете удалить \ r перед запуском регулярного выражения, а затем заменить их перед передачей следующему. Или измените копию, если это работает лучше. Таким образом, ваше регулярное выражение находит позицию в соответствии с тем, что ожидает AWT.

0 голосов
/ 24 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...