У меня есть две проблемы с этим фрагментом кода. Благодаря некоторым приятным парням здесь, в предыдущем вопросе, я получил его для правильной работы, но теперь я снова вижу себя в бесконечном цикле, и я не понимаю, откуда это происходит. То, что я пытаюсь сделать здесь, это игра в палач: обрабатывайте один символ, читаемый в EditText (litera), и я ищу его одним словом (cuvAles), затем я хочу заменить подчеркивание соответствующей буквой.Android: бесконечный цикл в EditText TextWatcher
Вот функция, это с проблемой:
litera.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {}
public void beforeTextChanged(CharSequence s, int start, int count, int after){}
public void onTextChanged(CharSequence s, int start, int before, int count){
String ghici = litera.getText().toString();
if(!ghici.equals("")){
System.out.println(ghici);
litera.setText("");
if(cuvAles.contains(ghici)){
int poz = 0;
while(cuvAles.indexOf(ghici, poz)!= -1){
poz = cuvAles.indexOf(ghici);
String spatii = cuvant.getText().toString();
String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-2);
cuvant.setText(spatii2);
}
}
else gresite.append(ghici+" ");
}
}
});
Есть две проблемы:
1) String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-1);
бросает исключение StringIndexOutOfBounds. Я думаю, что это partya.length() часть, но я пробовал с -2, и он все еще не работает. Причина, по которой слово не соответствует подчеркиваниям, заключается в том, что у меня есть промежутки между ними, чтобы быть ясными.
2) Если я удалю другую проблему (замените строку на константу), я получаю бесконечный цикл (я думаю, что это бесконечный цикл, потому что программа перестает отвечать на запросы, и я вижу, что GC в logcat работает отчаянно) ,
К сожалению, это не работает. Любые другие идеи? И о проблеме индекса строки из границ? – FloIancu