У меня такая проблема:
Текст «ABCD \ r \ nEFGHJ», загруженный из файла, сопоставляется с регулярным выражением Java «EFGH». Объект сопоставления, конечно, говорит, что начало сопоставленной строки находится в позиции 6. Сопоставитель считает \ r \ n как две позиции.
Я помещаю исходный текст в компонент AWT TextArea, а затем вызываю select (6,10), чтобы выделить совпавшую область. Угадайте, что ... он начинает выделяться с буквы «F». На одну позицию вперед, чем следовало ...
Если перед совпадающей областью предшествует более 1 пары crlf, то выделение перемещается еще дальше, чем должно.
У кого-нибудь есть простое решение?




Простое решение: удалить все \ r из текста ... :-P
Не так глупо, как кажется, если только у вас не совпадают концы строк (это может случиться) и вы не хотите, чтобы они оставались неизменными ... И это, вероятно, то, что компонент делает в любом случае.
Я не могу связываться с текстом, потому что это данные протокола, а символы \ r и \ n имеют семантику, которая не имеет отношения к отображению или разделению строк. Мне просто нужен компонент, который будет обрабатывать каждый входной символ отдельно и рассматривать его как отображаемый и подсчитанный, независимо от того, как он отображается.
Если \ r \ n согласованы, вы можете удалить \ r перед запуском регулярного выражения, а затем заменить их, прежде чем переходить к следующему. Или замените копию, если так лучше. Таким образом, ваше регулярное выражение находит позицию в соответствии с тем, что ожидает AWT.
Событие ColdFusion имеет для этого встроенную функцию. Безопасная ставка.