옵션 |
|
public int findTokenStart(CharSequence text, int cursor) {
int i = cursor;
Log.e("index : " + i, "text : " + text.charAt(i - 1));
while (i > 0 && text.charAt(i - 1) != ' ') {
i--;
}
while (i < cursor && text.charAt(i) == ' ') {
i++;
}
return i;
}
이런 함수 형태로 돼있고 Log.e는 출력형태를 보기 위해서 넣어놓은 겁니다.
이놈은 그냥 안드로이드에 내장돼서 자동으로 호출되는 함수 그런형태 인데요
여기서 인자로 들어오는 text는 사용자가 어플에 입력한 text들이고 cursor는
text를 입력할 때의 커서의 위치가 0부터 순차대로 들어옵니다.
(ex. 안녕하세요를 친다고 하면, text는 ㅇ->아->안->안ㄴ->안녀->안녕->안녕ㅎ->안녕하->안녕하ㅅ->안녕하세->안녕하세ㅇ->안녕하세요
이런 식으로 들어오고 cursor는 커서 초기 0,
ㅇ~안까지 1, 안ㄴ~안녕까지 2, 안녕ㅎ~안녕하까지 3, 안녕하ㅅ~안녕하세까지 4, 안녕하세ㅇ~안녕하세요까지 5
커서 위치 표현하면 |안|녕|하|세|요| 이렇게 해서 최종적으로 5가 되는 것)
text.charAt으로 탐색 진행하는 이유는 해당 index(cursor) 위치의 텍스트값이 공백인지 아닌지를 탐색하기 위함인데용
문제는 안녕하세요 에서 안을 치고 ㄴ을 치려 하면 java.lang.StringIndexOutOfBoundsException: length=1; index=1
이런 오류가 뜨는데, text.charAt(i - 1) 요놈이 문제인 듯 합니다..ㅠㅠ 인덱스에 접근을 잘못했다? 뭐 이런 것 같은데
대체 이게 왜 문제가 되는건지 모르겠는게 text는 위에서 설명한 저 순서대로 들어오고
안ㄴ 을 치는 순간의 text.charAt(i - 1)이라면 'ㄴ'일 것이고 인덱스에 잘못 접근한게 아닐텐데 얘가 왜 문제가 생기는걸까요??
하나 더 충돌이 일어나는 것으로 추정되는 (오류에서도 이 라인에서도 오류가 난다고 뜨는) 함수는
protected void performFiltering(final CharSequence text, final int keyCode) {
String filterText = " ";
super.performFiltering(filterText, keyCode);
}
요놈이고 다른 클래스에 존재하는데,
재귀호출시에 filterText가 아닌 인자인 text를 그대로 넣어주면 오류는 안나는데 원하는 기능이 실행이 되지 않습니다.ㅠ
맨땅에서 짠게 아니라 오픈소스를 가져와서 수정작업 거치고 디버깅하면서 코드를 이해한거라 설명에 한계가 있는 점
양해 부탁드립니다 ㅠ_ㅠ