java - 删除 searchView 中单词的重音
问题描述
我正在尝试删除搜索者的话的重音,但我的代码不起作用。
我希望您查找一个示例词Você
的所有变体Voce, Você, voce, você, VOCE, VOCÊ
。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.busca, menu);
MenuItem menuItem = menu.findItem(R.id.sv);
SearchView searchView = (SearchView) menuItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//Irá tirar não só acentuações mas também qualquer caractere fora de ASCII
String texto;
texto = Normalizer.normalize(query, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
//seu código
return false;
}
//se for pra passar o texto já modificado para o arrayAdapter, vc faz:
@Override
public boolean onQueryTextChange(String newText) {
String texto;
texto = Normalizer.normalize(newText, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
arrayAdapter.getFilter().filter(texto);
return true;
}
});
getMenuInflater().inflate(R.menu.activity_main, menu);
return super.onCreateOptionsMenu(menu);
}
解决方案
正如您在此处看到的(从 Unicode 字符中删除变音符号 (ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ)),您可以使用 java.text 包来执行此操作。您首先删除变音标记,然后转换为 ascii。非 ASCII 字符会变成问号。
推荐阅读
- python - 如何修复'UnboundLocalError:分配前引用的局部变量'pause''
- python - 没有但也有点重复的排列
- awk - 匹配 2 个文件中的 2 列并从第一个文件中获取另一个值
- c++ - 实例化和未实例化模板的部分模板特化
- vue.js - 如何从 vue.js 网站清除缓存?
- css - 我可以在仍然换行到下一列的同时从上到下对网格项目进行排序吗?
- postsharp - PostSharp:如何混合语义和非语义建议?
- node.js - 使用先前数据的条件对 upsert 进行续集
- math - 我如何将数学导入kvlang?
- python - 从文本文件创建单字符和双字符 n-gram