dimy44, не. Я отталкиваюсь от положений курсора. Ловлю конечную и стартовую позицию. Исключение вылетает только в случае с выделением из клавиатуры путем кнопок.
Жень, я выше писал, в случае выделения справа налево int значение getSelectionStart() получается больше getSelectionEnd(), они меняются местами, просто получаешь эти два значения, и с помощью Math получаешь min и max, мин это старт, макс это енд. С какой стороны бы не выделялось, надо мин и макс получить. А в твоем случае ты по умолчанию считаешь, что старт меньше енда, но ведь, логично, что при выделении наоборот программист, видя какой индекс больше, какой меньше, видит, какое направление выделения. Но в твоем случае это не важно, объект Math поможет выяснить, где что.
Жень, на мой взгляд, текст вообще не обязательно юзера заставлять выделять, пусть бы ткнул например "курсив", тэги вставились, курсор между ними, пусть дальше печатает себе.