我正在创建一个搜索实用程序,它将搜索SQLITE数据库中的元素.唯一的问题是,数据库包含一些字符,如Åèô,它们在拉丁语中…
是否有一种简单的方法可以忽略这些字母并将它们视为英文字母对应物(Å= A,è= e …)?
我想过设计所有这些字符的1对1映射,比如
HashMap lstOfChar = new HashMap();
lstOfChar.put('Å', 'A');
lstOfChar.put('è', 'e');
并且当从数据库检索数据时,每个这样的字符将被替换为等效的英语字母并且将显示搜索结果.
If I am searching Deepak then the rows containing DeepÅk or DÈepak or deepÃk should be searched
但这将是漫长的过程和维护也将是艰难的.
是否有一些优雅的方式,可能是SQLITE提供了一些功能,还是可以通过SQL实现.
我正在使用Java平台.
编辑我发现Normalizer in posted answer确实有助于在获取结果后执行程序化操作,但这可以通过数据库或通过以某种特殊方式触发SQL来完成,因为它需要大量时间来获取结果并应用此函数并返回结果.
解决方法:
您正在寻找Normalizer.它允许您在重音的Unicode字符及其分解之间进行映射:
Normalizer.normalize(text, Normalizer.Form.NFD).replaceAll(
"\\p{InCombiningDiacriticalMarks}+", "");
我建议你事先这样做,因为它很贵,并把它放在“name_search”专栏或类似的东西中.值得注意的是,这不会捕获所有非“英文”字母,因为它们并不总是有分解,但是é和Â等基础知识将会匹配.
关于你的编辑:正如我所说,最好的方法是将转换应用到所有行,并将结果放在一个名为“name_search”的附加数据库列中.它类似于在表上创建索引.在SQL中没有与Normalizer的功能相同的功能,虽然有些RDBMS系统可能提供一个,但SQLite肯定不会.
标签:java,sqlite,unicode
来源: https://codeday.me/bug/20190831/1774928.html