【问题标题】:Changing text input to also treat "u" as "ü", "ss" as "ß", etc. for word suggestions将文本输入更改为也将“u”视为“ü”,将“ss”视为“ß”等以获取单词建议
【发布时间】:2014-10-10 17:58:23
【问题描述】:

我有以下想法:

在德语中,我们有四个额外的字母(ä、ö、ü、ß),我不知道有任何其他语言有这些人声,但我认为有口音的法国人也知道这个问题。我们在 Google Play 商店中有很多应用程序用于城市、公共汽车站、火车和其他类似的东西。现在,如果我们在旅途中总是不得不写这些信,真是令人筋疲力尽。写 Munchen (=München [de] = Munich [en])、Osterreich (Österreich [de] = Austria [en]) 或类似 Uberwasserstrasse (Überwasserstraße [de] = Over-Water-Street [en] 之类的东西会容易得多])。所以我现在的问题是:

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

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

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

【问题讨论】:

  • 对我来说,实现您所描述的唯一方法是构建自定义键盘。
  • 所以我可以用自己的键盘给应用程序提供不同的单词?是否有足够的服务?
  • 使用 SwiftKey 或任何其他体面的键盘,它会为您提供所需的建议(输入“Oster”后的Österreich)。我使用 SwiftKey 是因为我可以同时使用多种语言,而无需在它们之间切换。
  • 也就是说,我认为这个问题过于宽泛或不够具体,无法被视为编程问题。
  • 我不是 Android 爱好者,但我认为这可能很方便:stackoverflow.com/questions/14009261/… 这个想法是您的查找对口音和变音符号不敏感。这种方法可以使用标准键盘和字符集。希望这会有所帮助。

标签: android android-edittext


【解决方案1】:

您可以通过相反的方式执行此操作,将键入的字符“规范化”为相关的非变音版本。您可以为此使用 java.Text.Normalizer 类。一个好的sn-p可以在this article:

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

当应用于“Münich”时,这将返回“Munich”。这样,您可以使用这些标准化版本进行简单的字符串比较。

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

【讨论】:

    【解决方案2】:

    您正在寻找的是所谓的不区分重音的整理序列。 SQLite 的 COLLATE 运算符可用于执行此类搜索,但我从另一篇文章中了解到 might be bugs 您需要注意。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 2017-10-31
      • 2010-12-09
      • 2015-06-05
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      相关资源
      最近更新 更多