我是 java 和 android 开发的新手,我正在开发一个通过 EditText 从用户那里获取输入的应用程序。但是,有时输入数据中的某些字符的编码与应用程序预期的不同。
我创建了一个包含所有可能映射(大约 460 个元素)的 HashMap ,每当用户输入(或粘贴)某些内容时,我都会使用 afterTextChanged 方法遍历文本并将与不正确编码匹配的那些与正确显示正确的。 我的代码适用于小型条目,但是它越长它变得越慢,因为 afterTextChanged 将在我进行的每次交换后递归调用。当粘贴包含大约 30 多个字符且编码不正确的文本时,应用程序将崩溃。
这是我的代码:
public void afterTextChanged(Editable editable) {
substituteText(editable);
}
public CharSequence substituteText(Editable txt) {
if (txt.length() == 0) {
return txt;
}
for (int i = 0; i < txt.length(); i++) {
char ch = txt.charAt(i);
CharSequence ret = myHashMap.get(ch);
if (ret != null) {
txt.replace(i, i + 1, ret);
}
}
return txt;
}
我考虑过将“可编辑”克隆到一些,更改它,然后将其复制回 edittext 可编辑变量,这样它只会将其视为一个更改,但我没有这样做,因为我找不到一种简单的方法来克隆它。
有没有更有效的方法来做到这一点?
最佳答案
如果您使用 onTextChanged 而不是 afterTextChanged,您将获得用户输入的新字符及其所在的位置,您只需要检查这些。
关于java - 如何在 Android 中高效地编辑 EditText 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22367462/