当前位置: 首页 > 知识库问答 >
问题:

TextWatcher -替换字符串的最后一个字符

孙鑫鹏
2023-03-14

每当“q”被写为我附加TextWatcher的edittext的最后一个字符时,这个“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”时,什么也没发生。一些帮助?非常感谢。

共有1个答案

水焱
2023-03-14

不要使用< code>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
        }
    }
}
 类似资料:
  • 假设我有一根绳子 我想把“AA”替换成“BB”,但只能是最后一次出现,就像这样: string.replace()和string.replaceFirst()都不能完成这项工作。有string.replaceLast()吗?如果没有,会有一个还是有替代方案也可以处理正则表达式?

  • 问题内容: 我有这样的字符串 我想用转义双引号(\“)替换最后一个双引号(”) 字符串的结果是 我怎样才能做到这一点。我知道要替换字符串的第一次出现。但不知道如何替换字符串的最后一次出现 问题答案: String str = “"Position, fix, dial"“; int ind = str.lastIndexOf(“"“); if( ind>=0 ) str = new StringB

  • 问题内容: 有谁知道用一个字符串中的另一个字符串替换最后一个出现的字符串的快速方法? 问题答案: 您可以使用此功能:

  • 问题内容: 我想,以取代过去的字符串,它是一个,与) 假设字符串是: -Insert into dual (name,date, 转换为: -Insert into dual (name,date) 问题答案: 以下代码应将的最后一次出现替换为。 注意 如果不含,则会抛出Exception 。

  • 问题内容: 假设我有以下代码: 这段代码运行后,价值会 如果我以相反的顺序替换它们,则会发生类似的问题: 的值将是 我的目标是把成我怎么能做到呢? 问题答案: 使用Apache Commons StringUtils中的方法:

  • 我使用TextWatcher来更改按下的键值。我的目标是在打字时替换一些字符。例如当我键入键时,如果到达“S”字符,就用“a”字符替换它。我的问题是:我应该在beforeTextChanged中做吗??怎么会?有人能给我举个例子吗?