检查对话框是否包含任何禁止的关键字android

时间:2017-08-02 15:13:36

标签: android android-edittext android-sqlite

我的数据库表包含一些“禁止关键字”字样,我让用户通过Android应用程序输入他对我服务的意见。

如果用户在评论文本中输入任何禁止的关键字并且不允许他发布评论,我想显示错误消息。

关键字存储在SQLite数据库中。

如果有任何图书馆可以提供帮助请咨询吗?基本上我想知道如何在不拆分用户文本和搜索数据库中的每个单词的情况下这样做,我需要一种优化的方法来做到这一点。

2 个答案:

答案 0 :(得分:0)

您可以获取用户输入的文本作为字符串。然后对输入的文本使用String.split(“”)方法创建一个String数组,其中每个元素是1个单词。现在循环遍历String数组,并检查是否有任何单词与任何禁止的关键字匹配。解决你的评论说“不分割用户文本并搜索数据库中的每个单词”,这是一个可以使用的可行选项。

另一种选择是将数据库中禁止的关键字读入String数组。循环遍历数组并使用indexOf(String)方法查看输入的字符串是否包含任何禁止的关键字。如果indexOf返回-1,则表示找不到该字符串(未找到禁止的关键字)。你可以这样做:

for (String str : prohibitedStrList) {
    // inputtedStr is from the dialog box that user entered
    if (inputtedStr.indexOf(String str) != -1) {
        // throw your error message
    }
}

答案 1 :(得分:0)

以下是如何实现您想要的解决方案:

当用户开始编辑时,从数据库中检索禁止的单词,这样可以节省您对数据库进行多次调用的时间。

将单词存储在HashSet中。如果您不知道HashSet作为HashMap工作但没有值,只有键,这意味着没有重复的条目。

在您的EditText中添加TextWatcher,在afterTextChanged中,一旦获得空白区域,意味着用户点击空格按钮,获取可编辑的长度,从后向找到下一个空白区域(换句话说,得到最后介绍的单词)。这可以防止您从一开始就循环使用String,只对最后一个字符执行此操作。

完成此操作后,您已完成最后一句话,只需执行以下简单验证:

if(!myHashSet.add(myStringWord)) //This means the word is present inside your prohibitive words HashSet
    showErrorMessageForProhibitiveWord();