【问题标题】:TextWatcher - Replace last char of stringTextWatcher - 替换字符串的最后一个字符
【发布时间】:2014-06-13 01:59:51
【问题描述】:

每次“q”被写为我附加 TextWatcher 的编辑文本的最后一个字符时,“q”将被替换为“a”。我用:

public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
        if(s.length() > 0 && s.toString().charAt(s.length()-1) == 'q')
        {
            current_string = s.toString();
            current_string = current_string.substring(0, (current_string.length()-1));
            et.setText(current_string);
            }
        }

但是,当我测试代码时,当我输入“q”时,什么也没有发生。一些帮助?非常感谢

【问题讨论】:

  • 你忘了在substring()之后附加a
  • 你应该使用StringBuilder,快捷方式是et.setText(current_string + "a");

标签: java textwatcher


【解决方案1】:

不要使用afterTextChanged,这很危险,因为它会被递归调用,你可能会陷入无限循环。

正如文档所说:

     It is legitimate to make further changes to s from this callback,
    but be careful not to get yourself into an infinite loop, because any 
   changes you make will cause this method to be called again recursively

请改用onTextChanged

在你的问题中

您忘记将字符 a 添加到您的字符串中

public void onTextChanged (CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub
    if(s.length() > 0 && s.toString().charAt(s.length()-1) == 'q')
    {
        current_string = s.toString();
        current_string = current_string.substring(0, (current_string.length()-1));
        et.setText(current_string + "a"); //add the a after q is deleted
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多