-1 голос
 
433 просмотра
1.02.2019 / 14:33  Nolosha

Работа с линиями: Стереть линию

Делаю я программу опять же на Android. Там есть текстовое поле, и при выборе пункта из меню опций линия(на которой стоит указатель) должна полностью стереться, То есть как в Android Студио. Этой работой занимается у меня отдельный класс . Есть там метод который всё это делает.
Вот код:
  1. position = editText.getSelectionStart(); //позиция считывания
  2.         int first,end = 0; /* это числа от (ОТ) и (до) которые обозначают начало и конец строки которую надо вырезать. */
  3. //следующий цикл считывает начальную позицию
  4. while(true){
  5. //метод peek считывает текущий символ по позиции, именно с строки с текстом который был получен в конструкторе
  6.             if((peek() == '\n') || (peek() == '\r') || (position == 0)){
  7.                 position++;
  8.                 first = position;
  9.                 break;
  10.             }
  11.             next(false); // Переходим к следущему символу по позиции, при передаче параметра false мы идем назад, тоесть position--. При true, вперед
  12.         }
  13. // следующий цикл считывает конечную позицию
  14.         while(true){
  15.             if((peek() == '\n') || (peek() == '\r') || (peek() == '\0')){
  16.                 position++;
  17.                 end = position;
  18.                 break;
  19. }
  20.             next(true);
  21.         }
  22.         StringBuilder buff = new StringBuilder();
  23.         buff.append(input); // строка с edittext
  24.         buff.delete(first,end);
  25.         done = buff.toString();
Естественно Здесь много недочетов. Например когда считывается первая или последняя строчка приложение вылетает. А если курсор поля стоит в самом конце, такая же ситуация: вылет. Как мне нормально это сделать.
Изм. Nolosha от 1.02.2019 / 14:34
1.02.2019 / 15:31  aNNiMON
selection start вроде бы может быть -1, следует это учитывать.
А ещё два цикла и посимвольный перебор это явно лишнее. Можно же черех indexOf('\n', pos) найти позиции нужных переносов строки.
На \0 вообще не стоит надеяться, в java он не ставится в конце строки.
Ответы
 
0 голосов
 
# 1.02.2019 / 15:54  Nolosha
Отвечаю на комментарий aNNiMON:
indexOf("\n",pos) - если указатель по середине линии, то как мне получить эту позицию.
А может EditText иль StringBuilder, умеет работать с конкретной линией? Типа:
getStringAtLine. Иль может есть какая-то библиотека для этого?
Всего: 1

Реклама

Мы в соцсетях

tw tg yt gt