更改文本输入也将“u”视为“ü”,将“ss”视为“ß”等,以用于单词建议

时间:2014-10-10 17:58:24

标签: android android-edittext

我有以下想法:

在德语中,我们有四个额外的字母(ä,ö,ü,ß),我不知道任何其他语言有这些人声,但我认为法国人的口音也知道这个问题。我们在Google Play商店中有很多适用于城市,公交车站,火车和其他类似应用的应用。现在真的很累,如果我们在旅途中,我们总是要写这些信件。编写Munchen(=München[de] =慕尼黑[en]),Osterreich(Österreich[de] =奥地利[en])或类似Uberwasserstrasse(Überwasserstraße[de] = Over-Water-Street [en] ])。所以现在我的问题是:

很多应用都会显示我们刚才输入的字词的建议。我认为在代码中它是这样的:

String current = editText.getText().toString();
db.lookUp(current); // Of course SQL statement

我们可以勾选这个,以便Android认为我们输入了ä,ö,ü,ß如果我们写一个a,o,u,ss并且系统会查找带有这些元音之一的单词并建议两者吗?在这里,我不想要求代码 - 我想讨论我们是否能够为Android系统编写hack或hook。此外,可以使用解决方案假设root权限。我很期待你的想法。

2 个答案:

答案 0 :(得分:1)

您正在寻找的是被称为重音不敏感的整理顺序。 SQLite的COLLATE运算符可用于进行此类搜索,但我从另一篇文章中了解到,您需要注意might be bugs

答案 1 :(得分:1)

你可以通过将标准化的字符“标准化”为相关的非变音版本来反过来这样做。您可以使用java.Text.Normalizer类来实现此目的。在this article中可以找到一个很好的代码段:

public static String removeAccents(String text) {
    return text == null ? null :
        Normalizer.normalize(text, Form.NFD)
            .replaceAll("\\p{InCombiningDiacriticalMarks}+", "");
}

当应用于“Münich”时,返回“慕尼黑”。这样,您可以使用这些规范化版本进行简单的字符串比较。

但这不适用于“ß”。如果这是唯一的特殊情况,您可以单独处理。