Java TextWatcher StringBuilder append方法将CharSequence附加到两个StringBuilder对象

Java TextWatcher StringBuilder append方法将CharSequence附加到两个StringBuilder对象,java,android,append,stringbuilder,Java,Android,Append,Stringbuilder,我试图用字符替换EditText视图的显示值,同时将原始输入保留在另一个StringBuilder对象中 代码如下: final StringBuilder stringBuilderHiddenPassword = new StringBuilder(); final StringBuilder mPass = new StringBuilder(); pass = new StringBuilder(); etPassword.addTextChangedListen

我试图用字符替换EditText视图的显示值,同时将原始输入保留在另一个StringBuilder对象中

代码如下:

final StringBuilder stringBuilderHiddenPassword = new StringBuilder();
    final StringBuilder mPass = new StringBuilder();
    pass = new StringBuilder();
    etPassword.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            stringBuilderHiddenPassword.append("*");
            etPassword.removeTextChangedListener(this);
            etPassword.setText(stringBuilderHiddenPassword);
            etPassword.addTextChangedListener(this);
        }

        @Override
        public void afterTextChanged(Editable s) {
            pass.append(s);
            Toast.makeText(Pass.this, pass, Toast.LENGTH_SHORT).show();
        }
    });
第一个输入的字符作为输入的原始字符显示在Toast中,但第二个字符将添加一个
*
。因此,如果我输入
a
它会显示
a
,如果我输入
aa
,它会显示
aa*
,对于
aaa
它是
aa*a**
,依此类推


如何将这些对象与同时附加的对象分开?代码应该只附加到
stringBuilderHiddenPassword
,但很明显,这不是此方法的工作原理。

通过对原始字符串使用
替换
方法找到了解决方案:

replace = pass.toString().replace("*", "");
Toast.makeText(Pass.this, replace, Toast.LENGTH_SHORT).show();

不,这不是你应该做的,你应该使用一个自定义的
转换方法,文档说:“TextView使用转换方法来做一些事情,比如用点替换密码字符,或者防止换行符在单行文本字段中引起换行。”